to:
printf("%x", array);
najprawdopodobniej wydrukować adres pierwszego elementu twoja tablica w systemie szesnastkowym. Mówię "najprawdopodobniej", ponieważ zachowanie próby drukowania adresu tak, jakby był to unsigned int
, jest niezdefiniowane. Jeśli naprawdę chciał wydrukować adres właściwy sposób to zrobić byłoby:
printf("%p", (void*)array);
(Wyrażenie tablicą, w większości kontekstów, jest niejawnie konwertowane do („rozpada się” do) wskaźnik do tablicy najpierw element.)
Jeśli chcesz wydrukować każdy element swojej tablicy, musisz to zrobić jawnie. Format "%s"
przyjmuje wskaźnik do pierwszego znaku ciągu i mówi printf
, aby powtórzył ciąg znaków, drukując każdy znak. Nie ma żadnego formatu, który robi tego rodzaju rzeczy w systemie szesnastkowym, więc musisz to zrobić sam.
Na przykład, biorąc pod uwagę:
unsigned char arr[8];
można wydrukować elementu 5 tak:
printf("0x%x", arr[5]);
lub, jeśli chcesz zerem:
printf("0x%02x", arr[5]);
Format
"%x"
wymaga argumentu
unsigned int
i wartości, którą przechodzisz ing jest domyślnie
promowany do
unsigned int
, więc jest to poprawne. Można użyć wartości
"%x"
, aby wydrukować cyfry heksadecymalne
a
do
f
małymi literami,
"%X"
dla dużych liter (używane w obu przykładach).
(Zauważ, że format, "0x%02x"
działa najlepiej jeśli bajtów 8 bitów, to nie ma gwarancji, ale jest to prawie na pewno przypadek na każdym systemie najprawdopodobniej w użyciu.)
Zostawię je do Ciebie napisać odpowiednią pętlę i zdecydować, jak ograniczyć wyjście.
Utwórz tablicę typu 'unsigned char []' zamiast 'char []'. –
http://stackoverflow.com/questions/6357031/how-do-you-convert-buffer-byte-array-to-hex-string-in-c –