c - 在C中将二进制数组转换为十进制和十六进制
问题描述
所以我试图弄清楚如何将二进制数组(大小为 4 或 8)转换为 C 中的十进制和十六进制数。
例如,假设您有 {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;
}
解决方案
您的代码中有两个错误:
for
循环过早结束一次迭代。也就是说,size - 1
应该是size
。- 左移应该在屏蔽当前位之前发生。
所以函数应该如下所示:
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;
}
推荐阅读
- scala - 在 SBT 中按顺序运行测试:这些配置是否相同?
- php - 为什么静态调用接口属性并作为参数传递
- java - 使用数组在java中创建成绩单
- haskell - 我可以以某种方式使用比包指定的基础版本更高的包吗?
- c# - SignalR Core 异常处理和 http 错误代码
- perl - Perl 中的递归变量扩展
- python - Spanner SELECT 语句作为 Python 中的 json 数组
- javascript - 试图检查上传文件是 json ,但即使上传有效的 json 扩展名它也会给我一个错误,我做错了什么
- go - 正确制作 httputil.ReverseProxy 转发响应流
- java - Selenium 中的 Headless Chrome 检索空页面(尽管可以在没有 headless 标志的情况下工作)