Maison >développement back-end >Tutoriel Python >Comment puis-je convertir des entiers en chaînes d'octets et inversement en Python ?

Comment puis-je convertir des entiers en chaînes d'octets et inversement en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-20 14:52:02849parcourir

How Can I Convert Integers to Byte Strings and Back in Python?

Création de chaînes d'octets avec "bytes(n)"

La fonction "bytes(n)" dans Python 3 ne convertit pas un entier à sa représentation binaire mais crée à la place une chaîne d'octets de longueur n, remplie d'octets nuls (b'x00'). Ce comportement découle de Python 3.2, où la méthode "to_bytes()" a été introduite comme moyen d'encoder des entiers en octets.

To_Bytes et To_Bytes

Le "to_bytes ()" permet la conversion explicite d'un entier en une représentation en octets, en spécifiant l'ordre des octets (gros-boutiste ou petit-boutiste) et la longueur. Par exemple :

<code class="python">(1024).to_bytes(2, byteorder='big') == b'\x04\x00'</code>

From_Bytes et From_Bytes

La méthode complémentaire "from_bytes()" peut reconvertir une séquence d'octets en un entier :

<code class="python">int.from_bytes(b'\x04\x00', 'big') == 1024</code>

Entiers non signés

La méthode "to_bytes()" fonctionne pour les entiers non négatifs (non signés). Pour gérer les entiers signés, une approche légèrement différente est nécessaire :

<code class="python">def int_to_bytes(number: int) -> bytes:
    return number.to_bytes(length=(8 + (number + (number < 0)).bit_length()) // 8, byteorder='big', signed=True)

def int_from_bytes(binary_data: bytes) -> Optional[int]:
    return int.from_bytes(binary_data, byteorder='big', signed=True)</code>

En utilisant ces fonctions, vous pouvez encoder et décoder des entiers signés vers et depuis des séquences d'octets.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn