2014-09-02 33 views
6

你好我正在使用digi動態c。我想在將它轉換爲字符串在C中將十六進制轉換爲字符串?

char readingreg[4]; 
readingreg[0] = 4a; 
readingreg[1] = aa; 
readingreg[2] = aa; 
readingreg[3] = a0; 

目前,當我做printf聲明它必須是這樣的:

printf("This is element 0: %x\n", readingreg[0]); 

但我想這個字符串,所以我可以用printf聲明這樣

printf("This is element 0: %s\n", readingreg[0]); 

我本質上是通過TCP/IP端口發送readreg數組,我需要它作爲字符串。我似乎無法將其轉換爲字符串。謝謝你的幫助。 另外,如果有人可以告訴我如何一次完成每個元素而不是整個數組,那麼這將很好,因爲只有4個元素。

+0

請澄清一下,究竟是什麼給你希望打印第二個printf()。 – 2014-09-02 19:42:28

+0

[INET_NTOA()](http://linux.die.net/man/3/inet_ntoa) – 2014-09-02 19:52:20

+0

使用'snprintf'打印到緩衝區,然後打印?還要記住字符串終止0字節。 – hyde 2014-09-02 19:52:50

回答

6

0xaa溢出時,普通char簽訂後,使用unsigned char

#include <stdio.h> 

int main(void) 
{ 
    unsigned char readingreg[4]; 
    readingreg[0] = 0x4a; 
    readingreg[1] = 0xaa; 
    readingreg[2] = 0xaa; 
    readingreg[3] = 0xa0; 
    char temp[4]; 

    sprintf(temp, "%x", readingreg[0]); 
    printf("This is element 0: %s\n", temp); 
    return 0; 
} 
+0

這工作。謝謝! – 2014-09-03 16:01:35

+0

不客氣 – 2014-09-04 07:24:34

2

如果你的機器是大端,你可以做到以下幾點:

char str[9]; 

sprintf(str, "%x", *(uint32_t *)readingreg); 

如果你的機器是小端,你必須交換字節順序:

char str[9]; 
uint32_t host; 

host = htonl(*(uint32_t *)readingreg); 
sprintf(str, "%x", host); 

如果可移植性一個問題,你應該使用方法二,不管你的字節順序如何。

我得到以下輸出:

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

0x4aaaaaa0

相關問題