Seite 1 von 1

Byteorder bei Schreiben in Datei

Verfasst: Mittwoch 18. November 2015, 20:48
von bennn
Hallo, ich möchte ein Bytefile erstellen, wo die ersten vier Bytes die Zahl 1 im Format little Endian repräsentieren.
Leider scheint python die byte order beim schreiben nicht zu beachten..

Code: Alles auswählen

little_endian_bytes = pack('<l', 1)
# prints -> b'\x01\x00\x00\x00'
Jedoch..

Code: Alles auswählen

hexfile = open('hexfile','wb')
hexfile.write(little_endian_bytes)
hexfile.close()

# hexdump hexfile:
# 0000000 0001 0000                              
# 0000004
Kann jemand helfen?

Re: Byteorder bei Schreiben in Datei

Verfasst: Mittwoch 18. November 2015, 20:58
von __deets__
Das kann nicht sein. Und fuer mich ist es auch so nicht:

Code: Alles auswählen

beer:tmp deets$ hexdump /tmp/hexfile
0000000 01 00 00 00
0000004
Python's file-write kennt nur Bytes, und wenn dein string richtig ist, dann ist auch die Ausgabe richtig.

Aber dein hexdump scheint implizit die bei mir extra notwendige -d-Option gesetzt zu haben:

Code: Alles auswählen

beer:tmp deets$ hexdump -d /tmp/hexfile
0000000   00001   00000
0000004

Re: Byteorder bei Schreiben in Datei

Verfasst: Mittwoch 18. November 2015, 21:03
von Sirius3
@bennn: Deine Datei wird so geschrieben, wie Du angegeben hast. Du schaust Dir mit "hexdump" aber 16bit Werte an, die auch eine gewisse Endiness haben.

Re: Byteorder bei Schreiben in Datei

Verfasst: Mittwoch 18. November 2015, 21:04
von bennn
Ahhhhhh... besten Dank. Es lag wirklich an hexdump. Wenn ich mein hexdump mit -C aufrufe ist alles wie gewünscht. Klasse!

Re: Byteorder bei Schreiben in Datei

Verfasst: Mittwoch 18. November 2015, 21:05
von bennn
@Sirius3 macht Sinn, danke