Python doit utiliser le module struct pour lire et écrire les données binaires des fichiers afin de convertir les formats de données C/C++ et Python.
Les fonctions les plus couramment utilisées dans le module struct sont pack et unpack. L'utilisation est la suivante :
pack( fmt,v1,v2… ) | string | Convertissez les données en une chaîne (flux d'octets) selon le format donné (fmt), et renvoyez la chaîne. |
---|---|---|
Aucun | Convertissez les données en une chaîne (flux d'octets) selon le format donné (fmt) et écrivez le flux d'octets dans le tampon en commençant par offset (le tampon est un tampon inscriptible, module de tableau disponible) | |
tuple | analyse le flux d'octets selon le format donné (fmt) et renvoie le résultat de l'analyse | |
tuple | analyse le tampon en commençant par offset selon le format donné (fmt) et renvoie le résultat de l'analyse | |
taille de fmt | calcule le format donné (fmt) prend combien octets de mémoire, faites attention à l'alignement | |
Format |
signed char | integer | ||
---|---|---|---|
B | unsigned char | integer | 1 |
_Bool | bool | 1 | |
short | integer | 2 | |
non signé short | integer | 2 | |
int | integer | 4 | |
entier non signé | entier | 4 | |
long | entier | 4 | |
entier | 8 | f | |
flotteur | 4 | d | |
float | 8 | s | |
string | |||
char[ ] | string | ||
void * | integer | ||
4. Exemple | Remarque : dans le code, < signifie petit endian, > signifie grand endian | 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() Copier après la connexion | 5. , f devant une chaîne Python 5.1. Ajoutez u devant une chaîne |
str= u'hello' Copier après la connexion | 5.2. Le mécanisme de transfert consistant à ajouter r avant la chaînepour supprimer la barre oblique inverse. (Caractères spéciaux : c'est-à-dire ceux, barre oblique inverse et lettres correspondantes, indiquant la signification spéciale correspondante, comme le "n" le plus courant signifie un saut de ligne, "t" signifie Tabulation, etc.) | str= r'hello\n\t\n' Copier après la connexion | 5.3. Ajoutez b avant le. string indique que la chaîne est de type octets. |
str.encode(‘utf-8') bytes.decode(‘utf-8') Copier après la connexion | 5.4 Ajouter f avant une chaîneCommencer par f signifie que les expressions python entre accolades sont prises en charge dans la chaîne et la concaténation de chaînes | name = 'Lily' print(f'My name is {name}.') Copier après la connexion |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!