将十六进制数转换为bool数组

时间:2012-12-15 00:46:38

标签: c++

您好我需要在C ++中将十六进制数转换为二进制数。它代表一个4乘8的二进制图像。例如,以下十六进制数0xc00e90表示图像:

00000000
11000000
00001110
10010000

这是我的工作解决方案。 u是输入hex#,而image是bool数组[4] [8]。但我很确定这不是最佳解决方案,实现这个的更好方法是什么?

    for(int i=0;i<4;i++)
{
    std::bitset<8> bit((u>>(3-i)*8)&0xFF);
    cout<<bit<<"\n";
    for (int j=0;j<8;j++)
    {
        image[i][j]=(bool) bit[7-j];    
    }
}

1 个答案:

答案 0 :(得分:1)

实际上u不是十六进制数,它只是一个没有基数的数字,直到你用一些基数表示它们。你的解决方案很好,另一种方法是不用创建bitset:

uint32_t uu = u;
uint32_t mask = 0x80000000;
for (uint8_t i = 0; i < 32; i++) {
  image[i / 8][i % 8] = (bool) (uu & mask == mask);
  mask >>= 1;
}