【发布时间】:2018-02-05 02:02:36
【问题描述】:
如果我有这个unsigned long x(4 个字节),我如何将x 的每个字节转换为其十六进制等效值并将它们全部存储在数组中:unsigned char[4]?
更新
根据我得到的建议,我尝试了这两种解决方案:
解决方案 1:
unsigned char hex_str[9];
snprintf(hex_str, sizeof(hex_str), "%lX", target_hexstr);
printf("hex_str: %s\n", hex_str);
printf("size: %lu\n", sizeof(hex_str));
for(int x=0; x<sizeof(hex_str); x++)
printf("%x\n", hex_str[x]);
在这种情况下,hex_str 显示 1400 和 9 个“单位”:31、34、30、30、0、0、0、0、24。
解决方案 2:
hexstr[0] = (x & 0xFF000000) >> 24;
printf("%x\n", x[0]);
hexstr[1] = (hexstr & 0x00FF0000) >> 16;
printf("%x\n", x[1]);
hexstr[2] = (hexstr & 0x0000FF00) >> 8;
printf("%x\n", x[2]);
hexstr[3] = (hexstr & 0x000000FF);
printf("%x\n", x[3]);
printf("hex_str: %s\n", hex_str);
在这种情况下,hex_str 不显示任何内容和 4 个“单位”:0、0、14、0。
为什么这两种解决方案的结果不同?
【问题讨论】:
标签: c char type-conversion long-integer unsigned