questo:
printf("%x", array);
molto probabilmente stampare l'indirizzo del primo elemento di il tuo array in esadecimale. Dico "molto probabilmente" perché il comportamento del tentativo di stampare un indirizzo come se fosse un unsigned int
non è definito. Se si voleva davvero per stampare l'indirizzo, il modo giusto per farlo sarebbe:
printf("%p", (void*)array);
(Un'espressione array, nella maggior parte dei contesti, viene convertito in modo implicito ("decade" per) un puntatore alla matrice del primo elemento.)
Se si desidera stampare ogni elemento dell'array, è necessario farlo in modo esplicito. Il formato "%s"
prende un puntatore al primo carattere di una stringa e dice a printf
di scorrere la stringa, stampando ogni carattere. Non esiste un formato che faccia quel tipo di cosa in esadecimale, quindi dovrai farlo tu stesso.
Ad esempio, dato:
unsigned char arr[8];
è possibile stampare elemento 5 in questo modo:
printf("0x%x", arr[5]);
o, se si desidera uno zero:
printf("0x%02x", arr[5]);
Il formato "%x"
richiede un argomento unsigned int
e il valore unsigned char
ti passa ing è implicitamente promosso a a unsigned int
, quindi è corretto sul tipo. È possibile utilizzare "%x"
per stampare le cifre esadecimali a
tramite f
in lettere minuscole, "%X"
per lettere maiuscole (è stato utilizzato entrambi nell'esempio).
(Si noti che il formato "0x%02x"
funziona meglio se i byte sono 8 bit, che non è garantito, ma è quasi certamente il caso su qualsiasi sistema è molto probabile che l'uso.)
Lascio a voi scrivere il ciclo appropriato e decidere come delimitare l'output.
fonte
2012-04-29 21:15:21
Fai il tuo tipo di matrice 'unsigned char []' piuttosto che 'char []'. –
http://stackoverflow.com/questions/6357031/how-do-you-convert-buffer-byte-array-to-hex-string-in-c –