我正在学习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;
}
<climits>
并使用CHAR_BIT
来除去那个8。 - unwindC++中没有二进制IO操作符。您需要手动执行转换,可能使用位移操作符。实际的转换不是一个困难的任务,因此应该在C++初学者的能力范围内(虽然它不包括在标准库中)。
编辑:许多其他人已经提供了示例,所以我将提供我的首选方法。
void OutputBinary(std::ostream& out, char character)
{
for (int i = sizeof(character) - 1; i >= 0; --i)
{
out << (character >> i) & 1;
}
}
如果想要有些变化,你也可以使用一个16个元素的查找表来完成。
您可以轻松编写十六进制字符和它们的二进制“nibbles”之间的映射:
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";
};
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;
}
}
}
这听起来像是一项作业,如果是这样的话,你真的应该向老师寻求帮助。从互联网上寻求作业解决方案并不能在长远来看帮助你(除非你要进入项目管理领域)。
回答评论中的chustar(原问题提出者),我必须同意,如果你理解如何做到它,它是如何/为什么工作的,并且知道如何在将来自己解决它,那么是一个好事情。
然而,他标记为“正确”的答案证明了这个论点是错误的。它只包含代码,以“像这样”开头。很明显,原问题提出者想要的不是解释,而是有人为他编写代码。