将十六进制数转换为布尔数组

Convert hex number to bool array

本文关键字:布尔 数组 转换 十六进制数      更新时间:2023-10-16

嗨,我需要在C++中将十六进制数转换为二进制数。它表示 4 x 8 二进制图像。例如,以下十六进制数0xc00e90表示图像:

00000000
11000000
00001110
10010000

u 是输入十六进制 #,图像是布尔数组 [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];    
    }
}

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

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;
}