2017-01-22 88 views
-1

如果我有下面的C數組:Ç十六進制字符數組字符串表示

char arr[4]; 
arr[0] = 0x11; 
arr[1] = 0xc0; 
arr[2] = 0x0c; 
arr[3] = 0x00; 

如何,如下所示的上述數據被轉換成一個字符串?

char* str = "11c00c00"; 

回答

1
int main() 
{ 
    char arr[4]; 
    arr[0] = 0x11; 
    arr[1] = 0xc0; 
    arr[2] = 0x0c; 
    arr[3] = 0x00; 

    size_t len = sizeof(arr)/sizeof(*arr); 

    char* str = (char*)malloc(len * 2 + 1); 
    for (size_t i = 0; i < len; i++) 
    { 
     const static char table[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c','d','e','f' }; 

     unsigned char c = (unsigned char)(arr[i]); 
     unsigned int lowbyte = c & 0x0f; 
     unsigned int highbyte = (c >> 4) & 0x0f; 

     str[2 * i] = table[highbyte]; 
     str[2 * i + 1] = table[lowbyte]; 
    } 

    str[2 * len] = '\0'; 

    printf("%s\n",str); 

    return 0; 
} 
+0

我試圖理解你的代碼。你能解釋爲什麼你做'c&0x0f'和'(c >> 4)&0x0f'?謝謝。 – Jake

+1

'c&0x0F'是「計算c表示的字節值的低4位」。這會產生0-15之間的值。類似地,'(c >> 4)&0x0f'是「計算c的高4位」。 Google爲「c位掩碼教程」和「c bitshift教程」。很多很好的網站來解釋這個東西。 – selbie

0

轉換每個字符爲無符號的字符(所以將0xC0不爲負),然後將其轉換成一個整數,並輸出作爲一個兩位數十六進制值。

#include <stdlib.h> 
#include <stdio.h> 


#define INT(x) ((int)(unsigned char)(x)) 

int main() 
{ 
    char arr[4]; 
    arr[0] = 0x11; 
    arr[1] = 0xc0; 
    arr[2] = 0x0c; 
    arr[3] = 0x00; 

    char *str; 

    str=malloc(32); 
    sprintf(str, "%02x%02x%02x%02x", 
     INT(arr[0]), INT(arr[1]), INT(arr[2]), INT(arr[3])); 

    puts(str); 
} 

輸出是:

11c00c00

相關問題