Python muss das Strukturmodul verwenden, um Binärdaten von Dateien zu lesen und zu schreiben, um C/C++- und Python-Datenformate zu konvertieren.
Die am häufigsten verwendeten Funktionen im Strukturmodul sind Pack und Unpack. fmt,v1,v2… )
pack_into(fmt,buffer,offset,v1, v2… ) | Keine | |
---|---|---|
unpack(fmt,v1,v2……) | tuple | parse den Byte-Stream entsprechend dem angegebenen Format (fmt) und gebe das Parsing-Ergebnis zurück |
pack_from(fmt, buffer ,offset) | Tupel | Parsen Sie den Puffer, beginnend mit dem Offset, gemäß dem angegebenen Format (fmt) und geben Sie das Parsing-Ergebnis zurück. |
calcsize(fmt) Achten Sie beim Speichern auf die Ausrichtung. Das Datenformat fmt im Strukturmodul entspricht dem Typ in C/C++ und Python Größe | ||
signed char | integer | 1 |
B | unsigned. char | 1 |
1 | h | 4 | |
---|---|---|---|
unsigned int | Ganzzahl | 4 | |
integer | 4 | L | |
integer | 4 | q | |
8 | Q | ed long long | |
8 | f | float | |
4 | d | double | |
8 | s | char[] | |
p | |||
string | P | ||
integer | |||
Hinweis: Im Code, < bedeutet Little Endian | rrree | 5.1 Die Bedeutung des Hinzufügens von u, r, b, f vor einem StringThe Die folgende Zeichenfolge ist im Unicode-Format codiert und wird im Allgemeinen vor chinesischen Zeichenfolgen verwendet, um Probleme mit dem Speicherformat des Quellcodes zu vermeiden, die bei erneuter Verwendung zu verstümmelten Zeichen führen. | import struct # 打开文件 with open("binary_file.bin", "wb") as f: # 写入4个字节的整数(值为12345) int_value = 12345 f.write(struct.pack("<i", int_value)) # 写入8个字节的双精度浮点数(值为3.14159) double_value = 3.14159 f.write(struct.pack("<d", double_value)) # 写入一个字节的布尔值(值为True) bool_value = True f.write(struct.pack("<?", bool_value)) # 写入一个定长字符串(10个字符,值为"hello") string_value = "hello".encode("utf-8") f.write(struct.pack("<5s", string_value)) # 写入一个定长字节数组(20个字节,值为b"\x01\x02\x03...\x14") byte_array_value = bytes(range(1, 21)) f.write(struct.pack("<20s", byte_array_value)) f.close() # 打开文件 with open("binary_file.bin", "rb") as f: # 读取4个字节,解析成一个整数 int_value = struct.unpack("<i", f.read(4))[0] # 读取8个字节,解析成一个双精度浮点数 double_value = struct.unpack("<d", f.read(8))[0] # 读取一个字节,解析成一个布尔值 bool_value = struct.unpack("<?", f.read(1))[0] # 读取一个字符串,解析成一个定长字符串(10个字符) string_value = struct.unpack("<5s", f.read(5))[0].decode("utf-8") # 读取一个字节数组,解析成一个定长字节数组(20个字节) byte_array_value = struct.unpack("<20s", f.read(20))[0] # 打印结果 print(f"int_value: {int_value}") print(f"double_value: {double_value}") print(f"bool_value: {bool_value}") print(f"string_value: {string_value}") print(f"byte_array_value: {byte_array_value}") f.close() Nach dem Login kopieren | 5.2. Der Übertragungsmechanismus des Hinzufügens von r vor der Zeichenfolge
str= u'hello' Nach dem Login kopieren | 5.3 Fügen Sie b vor der Zeichenfolge hinzu gibt an, dass die Zeichenfolge vom Typ Bytes ist. | str= r'hello\n\t\n' Nach dem Login kopieren | In Python3 ist die gegenseitige Konvertierungsmethode zwischen Bytes und str bytes = b'hello' Nach dem Login kopieren | 5.4 Das Hinzufügen von f vor einem String
str.encode(‘utf-8') bytes.decode(‘utf-8') Nach dem Login kopieren |
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Python zum Lesen und Schreiben von Binärdateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!