C语言 将无符号长整型的每个字节转换为无符号字符数组的元素



如果我有这个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: %sn", hex_str);
printf("size: %lun", sizeof(hex_str));
for(int x=0; x<sizeof(hex_str); x++)
printf("%xn", hex_str[x]);

在这种情况下,hex_str显示1400和 9 个"单位":31、34、30、30、0、0、0、0、24。

解决方案 2:

hexstr[0] = (x & 0xFF000000) >> 24;
printf("%xn", x[0]);
hexstr[1] = (hexstr & 0x00FF0000) >> 16;
printf("%xn", x[1]);
hexstr[2] = (hexstr & 0x0000FF00) >> 8;
printf("%xn", x[2]);
hexstr[3] = (hexstr & 0x000000FF);
printf("%xn", x[3]);
printf("hex_str: %sn", hex_str);

在这种情况下,hex_str不显示任何内容和 4 个"单位":0、0、14、0。

为什么这两种解决方案有不同的结果?

因为我喜欢按位运算,所以我会告诉你我会做什么。但@BLUEPIXY的解决方案要优雅得多。

我们将需要

  • &位和
  • >>按位右移

这是一个简单的解决方案,我们希望UL4B.

unsigned long x = 42;
unsigned char uc[4];
uc[0] = (x & 0x000000FF);
uc[1] = (x & 0x0000FF00) >> 8;
uc[2] = (x & 0x00FF0000) >> 16;
uc[3] = (x & 0xFF000000) >> 24;
printf("uc[0] = %x n", uc[0]);
printf("uc[1] = %x n", uc[1]);
printf("uc[2] = %x n", uc[2]);
printf("uc[3] = %x n", uc[3]);

相关内容

最新更新