2017-10-02 5 views
1

Ceci est une question quelque peu étrange. J'ai besoin de convertir un identifiant entier, tel que 123456, en un octet au format b'123456 '. Je ne fais pas de conversion en octets mais je change juste le format pour ressembler à un octet et être interprété comme un seul octet. Donc, j'ai littéralement besoin de faire ce qui suit:Convertir int en "byte" en Python

10 = b'10' 
20 = b'20' 
30 = b'30' 

et ainsi de suite. Je ne peux pas convertir en une chaîne car j'ai besoin que les résultats soient en octets, et je ne peux pas faire une conversion réelle d'octets parce que bytes([10]) == b'\n' (et non b'10').

Toute aide ou conseil pour forcer cette traduction est très appréciée !!

+0

str (10) .encode() ' – poke

Répondre

2

Convertir le int à un str puis .encode dans bytes:

>>> x = 123456 
>>> bs = str(x).encode('ascii') 
>>> bs 
b'123456' 
+0

travaillé comme un charme - merci! – user3456269

1

Pensez à ce que 10, 20 et 30 sont en réalité. Bien sûr, ils sont des chiffres, mais exactement 10 est juste un decimal representation du nombre réel. Habituellement, il existe de nombreuses représentations différentes d'un seul nombre. Par exemple 0xA, 0o12 et 0b1010 sont différentes représentations du même nombre qui est écrit 10 dans sa représentation décimale. Donc, d'abord, vous devriez penser à la façon d'obtenir cette représentation décimale d'un nombre. Heureusement, c'est très facile puisque la représentation décimale est la valeur par défaut générale pour les nombres. Donc, il vous suffit de convertir votre nombre en une chaîne en appelant le str() function:

>>> str(10) 
'10' 
>>> str(20) 
'20' 

Une fois que vous faites cela, vous avez une chaîne avec la représentation correcte de votre numéro. Donc tout ce qui reste est de savoir comment convertir cette chaîne en un objet bytes. En Python 3, un objet bytes est juste une séquence d'octets. Donc, afin de convertir une chaîne en une séquence d'octets, vous devez décider comment représenter chaque caractère dans votre chaîne. Ce processus s'appelle l'encodage et se fait en utilisant str.encode(). Pour les caractères de la plage ASCII, le codage réel ne compte pas vraiment car il est le même dans tous les encodages communes, de sorte que vous pouvez simplement coller avec la valeur par défaut UTF-8:

>>> '10'.encode() 
b'10' 
>>> '20'.encode() 
b'20' 

Alors maintenant, vous avez tout ce dont vous avez besoin . Il suffit de combiner ces deux choses, et vous pouvez convertir vos numéros en un objet bytes de sa représentation décimale:

>>> str(10).encode() 
b'10' 
>>> str(20).encode() 
b'20'