将无符号长整数的每个字节转换为无符号字符数组的元素
问题描述:
如果我有这个unsigned long x
(4字节),我怎样才能将x
的每个字节转换为其十六进制数并将所有字节存储在数组中: unsigned char[4]
?将无符号长整数的每个字节转换为无符号字符数组的元素
UPDATE
基于然后sugestions我,我曾尝试这两种解决方案:
溶液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
为什么这2种溶液具有型动物的结果?
答
因为我喜欢按位操作iam会告诉你我会做什么。但@ BLUEPIXY的解决方案更优雅。
我们需要
-
&
位运算符和 -
>>
按位右移
下面是简单的解决方案,我们期待UL
为4B
。
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]);
你可以告诉他指数有什么区别吗?例如,在这篇文章中:https://stackoverflow.com/a/30840656/2692962,我认为这个命令与你的相反。 –
它的语法完全一样,语法不同。 –
请不要在没有显示任何尝试的地方提供代码。 –