【发布时间】:2018-09-08 21:25:09
【问题描述】:
我有一个数组:
unsigned char datalog[4];
datalog[0] = 0;
datalog[1] = 0xce;
datalog[2] = 0x50;
datalog[3] = 0xa3;
这些代表十六进制值 0xce50a3。它的十进制值为13521059。
我需要将此十六进制值转换为十进制数组,最好使用 sprintf,这样最终结果将是:
finalarray[0] = '1';
finalarray[1] = '3';
finalarray[2] = '5';
finalarray[3] = '2';
finalarray[4] = '1';
finalarray[5] = '0';
finalarray[6] = '5';
finalarray[7] = '9';
我尝试了几种 sprintf 输入组合,包括将我的十六进制数组连接成 unsigned long datalogvalue = 0xce50a3。但是 sprintf 只在转换时读取它的第一个字节。
例如:
sprintf(finalarray, "%d", *(unsigned long *)datalog);
产量:
finalarray[0] = '2';
finalarray[1] = '0';
finalarray[2] = '6';
finalarray[3] = ' ';
.....
206 是 0xce 的十进制表示。所以它只转换第一个十六进制字节而不是其余的。
关于如何将整个 unsigned long 转换为十进制数组有什么想法吗?
【问题讨论】:
-
什么是
datalogvalue? -
这不是说它正在转换前两个字节吗?
-
sizeof(unsigned long)在您的环境中的值是多少? -
涉及太多猜测,请发minimal reproducible example。
-
获取tour,阅读How to Ask并发布minimal reproducible example。您要编译到什么架构?大端还是小端?
finalarray[]是如何声明的?
标签: c arrays hex printf decimal