2017-08-27 90 views
-1

如果我有這個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種溶液具有型動物的結果?

回答

2

因爲我喜歡按位操作iam會告訴你我會做什麼。但@ 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]); 
+0

你可以告訴他指數有什麼區別嗎?例如,在這篇文章中:https://stackoverflow.com/a/30840656/2692962,我認爲這個命令與你的相反。 –

+0

它的語法完全一樣,語法不同。 –

+0

請不要在沒有顯示任何嘗試的地方提供代碼。 –

相關問題