我正在尝试在C中编写一个函数,将Hex值转换为二进制表示,然后将每个位分别存储在一个数组中。
所以目前我正在使用这种冗长的方法..
void HexToBinary(int *bits, unsigned int hex)
{
bits[31] = (hex & 0x90000000) >> 31;
bits[30] = (hex & 0x50000000) >> 30;
bits[29] = (hex & 0x30000000) >> 29;
bits[28] = (hex & 0x10000000) >> 28;
bits[27] = (hex & 0x09000000) >> 27;
bits[26] = (hex & 0x05000000) >> 26;
bits[25] = (hex & 0x03000000) >> 25;
bits[24] = (hex & 0x01000000) >> 24;
bits[23] = (hex & 0x00900000) >> 23;
bits[22] = (hex & 0x00500000) >> 22;
bits[21] = (hex & 0x00300000) >> 21;
bits[20] = (hex & 0x00100000) >> 20;
bits[19] = (hex & 0x00090000) >> 19;
bits[18] = (hex & 0x00050000) >> 18;
bits[17] = (hex & 0x00030000) >> 17;
bits[16] = (hex & 0x00010000) >> 16;
bits[15] = (hex & 0x00009000) >> 15;
bits[14] = (hex & 0x00005000) >> 14;
bits[13] = (hex & 0x00003000) >> 13;
bits[12] = (hex & 0x00001000) >> 12;
bits[11] = (hex & 0x00000900) >> 11;
bits[10] = (hex & 0x00000500) >> 10;
bits[9] = (hex & 0x00000300) >> 9;
bits[8] = (hex & 0x00000100) >> 8;
bits[7] = (hex & 0x00000090) >> 7;
bits[6] = (hex & 0x00000050) >> 6;
bits[5] = (hex & 0x00000030) >> 5;
bits[4] = (hex & 0x00000010) >> 4;
bits[3] = (hex & 0x00000009) >> 3;
bits[2] = (hex & 0x00000005) >> 2;
bits[1] = (hex & 0x00000003) >> 1;
bits[0] = (hex & 0x00000001);
}
它采用8个字符(32位)十六进制值并使用&和位移标识所需的位,然后将其存储在数组中,用于十六进制值中的每个位。
显然这是一个很长的方法而且不是很好。我正在寻找一种更简单,更简单的方法。
这些位必须分别存储在数组中,而不是存储在四边形中,因为我必须单独访问程序中的每个位。
最好的方法是什么?
谢谢
答案 0 :(得分:2)
for (int i=0;i<32;i++) {
bits[i]=hex&1;
hex>>=1;
}
答案 1 :(得分:0)
只需使用循环:
void HexToBinary(int *bits, unsigned int hex) {
for (int i = 0; i < 32; ++i) {
bits[i] = (hex >> i) & 1;
}
}
您不必将所有位都放入数组以单独访问每个位。您也可以使用以下功能访问它:
int bit(unsigned int hex, int i) {
return (hex >> i) & 1;
}
或使用宏:
#define BIT(hex, i) ((hex >> i) & 1)