用C语言将二进制数组转换为十进制和十六进制。

问题描述 投票:0回答:1

所以我想知道如何在C语言中把一个二进制数组(大小为4或8)转换为十进制和十六进制数。

比如说你有{0, 0, 0, 1}或者{1, 1, 1, 1, 0, 0, 0, 0},你想把它转换成十进制和十六进制。我设法通过使用8个二进制数组来实现它的工作。这个环节然而,当我试图将它用于4元素时,我的方法似乎失败了。

uint8_t ConvertToDec(uint8_t * bits, uint8_t size)
{
   uint8_t result = 0 ;

   for(uint8_t i=0; i < size-1; i++ ){
       result |=bits[i];
       result<<=1; 
   }   

   return result;

}

int main()
{
    uint8_t bits[] = {1, 1, 1, 1, 0, 0, 0, 0};
    uint8_t len = (sizeof(bits)/sizeof(bits[0]));
    uint8_t result = ConvertToDec(bits,len);
    char hex[5];
    sprintf(hex,"0x%02X",result);
    printf("%s",hex);

    return 0;
}
c binary hex bit-manipulation
1个回答
1
投票

你的代码中有两个错误。

  1. 你的代码中有两个错误: for 循环过早结束一次迭代。也就是。size - 1 应是 size.
  2. 左移位应该在当前位的屏蔽之前。

所以函数应该是这样的。

uint8_t ConvertToDec(uint8_t * bits, uint8_t size)
{
   uint8_t result = 0 ;

   for(uint8_t i=0; i < size; i++ ){
       result<<=1; 
       result |=bits[i];
   }   

   return result;

}
© www.soinside.com 2019 - 2024. All rights reserved.