2014-09-02 11 views
6

Ciao sto usando digi dynamic c. Sto cercando di convertire questo in a stringaConversione di esadecimale in stringa in C?

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

Attualmente quando lo faccio printf dichiarazioni deve essere simile a questo:

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

Ma io voglio questo nella stringa in modo da poter usare printf dichiarazione come questa

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

sto essentialy inviando la matrice readingreg sulla porta TCP/IP, per cui ho bisogno di avere come stringa. Non riesco a essere in grado di convertirlo in stringa. Grazie per l'aiuto. Anche se qualcuno può dirmi come fare ogni elemento alla volta piuttosto che l'intero array, ciò andrebbe bene dato che ci saranno solo 4 elementi.

+0

Si prega di chiarire, che cosa esattamente per voi vuoi stampare il secondo printf(). –

+0

[inet_ntoa()] (http://linux.die.net/man/3/inet_ntoa) –

+0

Utilizzare 'snprintf' per stampare su un buffer, quindi stamparlo? Ricorda anche la stringa che termina 0 byte. – hyde

risposta

6

0xaa overflow quando pianura char è firmato, usano 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

Questo ha funzionato. Grazie! –

+0

Siete i benvenuti –

2

Se la macchina è big endian, è possibile effettuare le seguenti operazioni:

char str[9]; 

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

Se la macchina è little endian dovrete scambiare l'ordine dei byte:

char str[9]; 
uint32_t host; 

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

Se la portabilità è una preoccupazione, dovresti usare il metodo due indipendentemente dalla tua endianità.

ottengo il seguente output:

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

0x4aaaaaa0