Was ist die Bedeutung der Buchstaben in der Ausgabe von struct.pack?

Wenn ich die Nummer in hex in struct Modul von Python,

>>> import struct >>> struct.pack("i",89) 'Y\x00\x00\x00' >>> struct.pack("i",890) 'z\x03\x00\x00' >>> struct.pack("i",1890) 'b\x07\x00\x00' 

Was ist die Bedeutung von "Y, z, b" in der Ausgabe?

    3 Solutions collect form web for “Was ist die Bedeutung der Buchstaben in der Ausgabe von struct.pack?”

    Du konvertierst nicht in hex. Sie packen die Integer als Binärdaten … in diesem Fall sind kleine Endian-Binärdaten. Die ersten Zeichen sind genau die entsprechenden ASCII-Zeichen zu den Rohbytes. ZB 89 ist Y , 122 ist z und 98 ist b .

    • Die erste pack erzeugt '\x59\x00\x00\x00' für 0x00000059 ; '\x59' ist 'Y' .
    • Die zweite produziert '\x7a\x03\x00\x00' für 0x0000037a ; '\x7a' ist 'z' .
    • Der dritte erzeugt '\x62\x07\x00\x00' für 0x00000762 ; '\x62' ist 'b' .

    Siehe untenstehende ASCII-Tabelle.

    http://www.asciitable.com/index/asciifull.gif

    Beachten Sie, dass Sie nicht in Hex konvertieren, Sie konvertieren Daten in rohe Bytes. Die Konsole widerspricht dann diese Bytes zurück zu Ihnen, in einer Form, die wieder als Python-Literal-Strings eingegeben werden kann.

    So python druckt die Literal-Byte-String , und einige der Bytes können als ASCII-Zeichen dargestellt werden; Die meisten Bytes im Bereich 0x21-0x7E können als solche gedruckt werden:

     >>> '\x22' '"' >>> '\x50' 'P' 

    Also 'Y', 'z' und 'b' sind Bytes, die in diesen Bereich fallen und Python nur sie als ASCII anstelle von \x Escapes druckt:

     >>> '\x59' 'Y' >>> '\x62' 'b' >>> '\x7a' 'z' 

    Der Rest deiner Bytes liegt außerhalb des bedruckbaren ASCII-Bereichs, so dass Python diese als \xFF Literale \xFF , was die Hex-Notation verwendet.

    Lasst uns zeilenweise
    Aber zuerst müssen wir das Little-Endian-Format und den Char-Wert verstehen:
    32-Bit-Little-Endian Int haben die wichtigsten Bits auf der rechten Seite
    So ist der Wert des Speicher-Hex (0x01, 0x02, 0x03, 0x04) wirklich (0x04, 0x03, 0x02, 0x01)
    Char Wert 'Y' = 0x59 = 89, 'z' = 0x7a = 122, 'b' = 0x62 = 98

    'Y \ x00 \ x00 \ x00' = 0x59, 0x00, 0x00, 0x00 / Daten im Speicher
    'Y \ x00 \ x00 \ x00' = 0x00000059 = 89 / Real-Integer-Wert

    'Z \ x03 \ x00 \ x00' = 0x7a, 0x03, 0x00, 0x00 / Daten im Speicher
    'Z \ x03 \ x00 \ x00' = 0x0000037a = 890 / Real-Integer-Wert

    'B \ x0b \ x07 \ x00' = 0x62, 0x07, 0x00, 0x00 / Daten im Speicher
    'B \ x0b \ x07 \ x00' = 0x00000762 = 1890 / Real-Integer-Wert

    Python ist die beste Programmiersprache der Welt.