如何在C++中将十六进制数转换为二进制?

chu*_*tar 11 c++ binary hex

我正在开始C++类,并希望在十六进制表示和二进制之间转换字母.我可以设法打印出十六进制数字:

for(char c = 'a'; c <= 'z'; c++){
    cout << hex << (int)c;
}
Run Code Online (Sandbox Code Playgroud)

但我不能对二进制文件做同样的事情.没有std::bin我可以用来将十进制数转换为二进制数.

Har*_*lby 48

像这样:

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;
    }
Run Code Online (Sandbox Code Playgroud)

  • 我从来不知道这个!这正是OP想要的,我自己学到了一些东西.给予好评! (3认同)
  • @chustar:你#include <bitset>了吗? (2认同)
  • 听起来你应该包括`<climits>`并使用`CHAR_BIT`来摆脱那个8. (2认同)

wor*_*ad3 5

在C++中没有二进制io操纵器.您需要手动执行转换,可能是使用bitshift运算符.实际转换并不是一项艰巨的任务,因此应该在C++初学者的能力范围内(而事实上,它不包含在标准库中可能不是:))

编辑:很多其他人都举了例子,所以我打算给出我喜欢的方法

void OutputBinary(std::ostream& out, char character)
{
  for (int i = sizeof(character) - 1; i >= 0; --i)
  {
    out << (character >> i) & 1;
  }
}
Run Code Online (Sandbox Code Playgroud)

这也可能被模板化为任何数字类型.