If I have this unsigned long x
(4 bytes), how I could convert each byte of the x
in its hexadecimal equivalent and store all of them in the array: unsigned char[4]
?
UPDATE
Based on then sugestions I got, I have tried this two solutions:
solution 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]);
in this case, hex_str
displays 1400
and 9 "units": 31, 34, 30, 30, 0, 0, 0, 0, 24.
solution 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);
in this case, hex_str
display nothing and 4 "units": 0, 0, 14, 0.
Why this 2 solutions have differents results?
Because i like bitwise operations iam gonna show you what i would do. But @BLUEPIXY's solution is way more elegant.
We will need
&
bitwise and >>
bitwise shift right Here is the simple solution, where we are expecting UL
as 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]);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.