【问题标题】:C++ Convert Hex Char to BinC++ 将十六进制字符转换为 Bin
【发布时间】:2015-10-30 10:14:11
【问题描述】:

我编写了一个程序,用于将 16 字符的十六进制数转换为 64 位二进制数。 64 = 16 十六进制 + 4 位二进制。

string completeBitmap;
char bitmap[16];
for (int c = 0; c < sizeof(bitmap); c++)
{
    string temp;
    temp = bitset<4>(bitmap[c]).to_string();
    completeBitmap += temp;
}

但当我阅读 'a'、'b、'c'、'd'、'e''f' 时,它们无法正确转换。 例如,'f' 应该是 '1111',但结果是 '0110'。 感谢您的帮助

【问题讨论】:

  • 字符 'f' 恰好有一个 ASCII 码 0x660110 == 0x6 - 该 ASCII 码的最低有效四位。文档的哪一部分向您建议bitset&lt;4&gt;('f') 会产生1111 的位集?

标签: c++ binary hex converter


【解决方案1】:

bitset&lt;4&gt;(bitmap[c]).to_string(); 将为您提供bitmap 数组中元素的 ascii 代码的二进制(最后 4 LSB)

您可能需要以下内容:

for (int c = 0; bitmap[c] ; c++)
{
    string temp;
    char diff = 0 ;

    if( bitmap[c] >= 'a' && bitmap[c] <= 'f' ) diff = -'a' + 10;

    else if( bitmap[c] >= 'A' && bitmap[c] <= 'F' ) diff = -'A' + 10 ;

    else if (  bitmap[c] >= '0' && bitmap[c] <= '9' ) diff = - '0' ;

    else assert ( false );

    temp = bitset<4>(bitmap[c] + diff ).to_string();

    completeBitmap += temp  ;
}

【讨论】:

    【解决方案2】:
    for(char c = 'a'; c <= 'z'; c++){
        bitset<sizeof(char) * CHAR_BIT> binary(c); //sizeof() returns bytes, not bits!
        cout << "Letter: " << c << "\t";
        cout << "Hex: " << hex << (int)c << "\t";
        cout << "Binary: " << binary << endl;
    }
    

    检查一下。

    【讨论】:

      猜你喜欢
      • 2018-01-31
      • 2014-06-09
      • 2018-06-06
      • 1970-01-01
      • 2018-01-22
      • 2017-08-12
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      相关资源
      最近更新 更多