Byteorder bei Schreiben in Datei

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
bennn
User
Beiträge: 10
Registriert: Mittwoch 18. November 2015, 20:36

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?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

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
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
bennn
User
Beiträge: 10
Registriert: Mittwoch 18. November 2015, 20:36

Ahhhhhh... besten Dank. Es lag wirklich an hexdump. Wenn ich mein hexdump mit -C aufrufe ist alles wie gewünscht. Klasse!
bennn
User
Beiträge: 10
Registriert: Mittwoch 18. November 2015, 20:36

@Sirius3 macht Sinn, danke
Antworten