2012-12-15 67 views
1

嗨我需要在C++中将十六进制数转换为二进制数。它代表一个4乘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];  
    } 
} 

回答

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; 
} 
相关问题