Maison  >  Article  >  développement back-end  >  Pourquoi \"bytes(n)\" ne représente-t-il pas la forme binaire de \"n\" ?

Pourquoi \"bytes(n)\" ne représente-t-il pas la forme binaire de \"n\" ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-20 14:54:02616parcourir

Why Doesn't

Pourquoi "bytes(n)" ne représente-t-il pas le binaire ?

La fonction "bytes(n)" dans Python 3 génère une chaîne d'octets de longueur 'n ' rempli d'octets nuls, plutôt que de convertir l'entier 'n' en sa représentation binaire. Ce comportement inattendu trouve ses racines dans les changements introduits dans Python 3.2.

La méthode 'to_bytes'

Pour convertir un entier en sa représentation binaire, vous pouvez utiliser la méthode 'to_bytes' introduite dans Python3.2. L'exemple suivant montre son utilisation :

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

Vous pouvez également implémenter vos propres fonctions pour gérer la conversion d'entier en octet :

<code class="python">def int_to_bytes(x: int) -> bytes:
    return x.to_bytes((x.bit_length() + 7) // 8, 'big')

def int_from_bytes(xbytes: bytes) -> int:
    return int.from_bytes(xbytes, 'big')</code>

Entiers signés

La méthode 'to_bytes' ne prend en charge que la conversion d'entiers non signés. Pour les entiers signés, le calcul de la longueur en bits est plus complexe :

<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>

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