C 将十六进制转换为二进制并在数组中存储位

C 将十六进制转换为二进制并在数组中存储位,c,binary,hex,C,Binary,Hex,我试图用C编写一个函数,将十六进制值转换为二进制表示,然后将每个位分别存储在一个数组中 所以目前我正在使用这种冗长的方法 void HexToBinary(int *bits, unsigned int hex) { bits[31] = (hex & 0x90000000) >> 31; bits[30] = (hex & 0x50000000) >> 30; bits[29] = (hex & 0x30000000) >>

我试图用C编写一个函数,将十六进制值转换为二进制表示,然后将每个位分别存储在一个数组中

所以目前我正在使用这种冗长的方法

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位)的十六进制值,并使用&和位移位来标识所需位,然后将其存储在十六进制值中每个位的数组中

显然,这是一个很长的方法,不是很好。我正在寻找一种更短更简单的方法

位必须单独存储在数组中,而不是四元组中,因为我必须单独访问程序中的每个位

最好的办法是什么

谢谢

只需使用循环:

void HexToBinary(整数*位,无符号整数十六进制){
对于(int i=0;i<32;++i){
位[i]=(十六进制>>i)&1;
}
}
您不必将所有位放入一个数组来单独访问每个位。您还可以通过以下功能访问它:

int位(无符号整数十六进制,整数i){
返回(十六进制>>i)&1;
}
或使用宏:

定义位(十六进制,i)((十六进制>>i)和1)
用于(int i=0;i>=1;
}

我不确定,但我认为sprintf可以将二进制数格式化为字符串
for (int i=0;i<32;i++) {
  bits[i]=hex&1;
  hex>>=1;
}