Printf raw-Daten auf eine Feste Länge hex-Ausgabe
Habe ich ein struct, sowie Zeiger auf eine struct ist, und ich möchte von printf () die ersten n-bytes als eine lange hex-Zahl oder als string von hex-bytes.
Im wesentlichen brauche ich die printf-entspricht der gdb untersuchen Speicher-Befehl, x/nxb .
Wenn möglich würde ich gerne noch verwenden, printf, wie das Programm logger-Funktion nur Variante. Noch besser, wenn ich so tun können, ohne die Schleife durch die Daten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nahm Eric Postpischil Beratung und gekocht, bis die folgende :
Wird es drucken Sie die bytes als fas, wie die Struktur erstreckt.
Update : vielen Dank für die Einsicht Eric 🙂 ich habe im code eingetragen.
size_t
geben, die unterscheiden sich möglicherweise von den unterzeichnetenint
Typ "%d" ist. Und ist es möglicherweise vorzuziehen, print-bytes mit "%02x", anstatt "%x". Letztere druckt nur eine Ziffer, wenn der Wert klein genug ist.Versuchen. Sagen, Sie haben Zeiger auf struct in
pstruct
.Als Eric weist darauf hin, das möglicherweise drucken Sie die bytes out-of-order. Es ist also entweder so, oder mit
unsigned char *
und (mit einemprintf
mit 64 Argumente oder die Verwendung einer Schleife).unsigned char
.char
Mai unterzeichnet werden, in welchem Fall der Förderung zuint
, der Auftritt, wenn die übergabe an printf verursachen negative Werte erscheinen als 32-bit-negative Werte. E. g., das byte 0xff wird so gedruckt, als "ffffffff". Außerdem, "%02x" ist ein besseres format zu verwenden, da Sie wahrscheinlich wollen, führende Nullen statt Leerzeichen.0
als gut.unsigned long long
sollte funktionieren - oh warte, dass die 8 bytes, nicht 64... Sie können schreiben, 64unsigned long long
s in diesem Fall. oder können Sie mit einer Schleife. aber vielleicht effektiver, wenn es aufgerollt ist, wie es ist hierunsigned char
ist besser; es wird die Byte-Adresse um. Mit größeren integer-Typen hat endian-Probleme; es kann die bytes, out of order.