我正在开始C++类,并希望在十六进制表示和二进制之间转换字母。我可以设法打印出十六进制数字使用:如何将十六进制数字转换为C++中的二进制文件?
for(char c = 'a'; c <= 'z'; c++){
cout << hex << (int)c;
}
但我不能这样做的二进制。没有std::bin
,我可以用来将十进制数转换为二进制。
我正在开始C++类,并希望在十六进制表示和二进制之间转换字母。我可以设法打印出十六进制数字使用:如何将十六进制数字转换为C++中的二进制文件?
for(char c = 'a'; c <= 'z'; c++){
cout << hex << (int)c;
}
但我不能这样做的二进制。没有std::bin
,我可以用来将十进制数转换为二进制。
像这样:
for(char c = 'a'; c <= 'z'; c++){
std::bitset<sizeof(char) * CHAR_BIT> binary(c); //sizeof() returns bytes, not bits!
std::cout << "Letter: " << c << "\t";
std::cout << "Hex: " << std::hex << (int)c << "\t";
std::cout << "Binary: " << binary << std::endl;
}
我从来不知道这个!这正是OP想要的,我自己也学到了一些新东西。给予好评! – 2009-01-27 14:50:25
在C++中没有二进制io操纵器。您需要手动执行覆盖,可能通过使用bitshift运算符。实际的转换不是一个困难的任务,所以应该在C++初学者的能力范围内(而不包括在标准库中的事实可能不是:))
编辑:许多其他人已经把所以我打算给我的首选方法
void OutputBinary(std::ostream& out, char character)
{
for (int i = sizeof(character) - 1; i >= 0; --i)
{
out << (character >> i) & 1;
}
}
这也可能被模板化为任何数字类型。
并在这里再sizeof(字符)??你们是否从int的例子中得到了这个结论? – AndreasT 2010-01-26 12:21:40
对于各种各样,你也可以使用16元素查找表。
刚刚意识到我做了一个可怕的双关语对不起:对不起:P – freespace 2009-01-27 14:42:14
*呻吟* 是的,可怕的双关语。 – 2009-01-27 14:48:33
你可以做这样的事情:与十六进制charachters了他们的二进制 '啃'
for(char c = 'a'; c <= 'z'; c++){
// char is 8 bits. print 4 bits
// at a time, starting with the MSB
for (int i = 4; i>=0; i-=4) {
switch (((int)c >> i) & 0xf) {
case 0:
cout << "0000";
break;
case 1:
cout << "0001";
break;
.
.
.
case 0xf:
cout << "1111";
break;
}
}
}
你可以随便写一个映射:
std::string HexCharToNibble(char c) {
switch (c) {
case '0': return "0000";
case '1': return "0001";
//... fill in the rest
case 'f': return "1111";
default: assert(false); return "bad input";
};
这个版本应该使用查找表完成。原始代码需要一个字符的事实也会令人困惑。 – 2009-01-27 14:49:38
这听起来像一个任务,在这种情况下,你真的应该问你的老师的帮助。从互联网寻求家庭作业的解决方案从长远来看并不能真正帮助你(除非你正在进行项目管理)。
在评论中回答chustar(OQ'er)时,我不得不同意,如果你明白怎么做,如何/为什么会有效,以及如何在将来自己弄清楚,那么是的这将是一件好事。
但是,他标记为“正确”的答案对该论点置之不顾。它只包含代码,前面加上“Like so”等字样。这很清楚,OQ'er寻找的是而不是作为解释,但有人为他写了他的代码。
我建议你向我们展示一个示例输入/输出。 – xtofl 2009-01-27 14:40:37