【问题标题】:Convert a binary array to decimal and hexadecimal in C在C中将二进制数组转换为十进制和十六进制
【发布时间】:2020-09-10 01:13:27
【问题描述】:

所以我试图弄清楚如何将二进制数组(大小为 4 或 8)转换为 C 中的十进制和十六进制数。

例如假设您有 {0, 0, 0, 1} 或 {1, 1, 1, 1, 0, 0, 0, 0} 并且您想转换为十进制和十六进制。我设法通过this link 使用 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. 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;

}

【讨论】:

  • 啊,好吧,这更有意义。谢谢你的帮助!!