Je travaille actuellement sur un programme de chiffrement/déchiffrement et je dois pouvoir convertir des octets en entier. Je le sais:
bytes([3]) = b'\x03'
Pourtant, je ne peux pas savoir comment faire l'inverse. Qu'est-ce que je fais terriblement mal?
En supposant que vous soyez sur au moins 3.2, il y a un intégré pour cela :
int.from_bytes (octets, ordre des octets, *, signé = False)
...
Les arguments octets doivent être soit un objet de type octet, soit un objet iterable produire des octets.
L'argument byteorder détermine l'ordre des octets utilisé pour représenter le entier. Si l'ordre des octets est "grand", l'octet le plus significatif est au début du tableau d'octets. Si ordre des octets est "petit", le plus octet significatif est à la fin du tableau d'octets. Pour demander le ordre d'octet natif du système hôte, utilisez sys.byteorder comme octet valeur de la commande.
L’argument signé indique si le complément à deux est utilisé pour représente l'entier.
## Examples:
int.from_bytes(b'\x00\x01', "big") # 1
int.from_bytes(b'\x00\x01', "little") # 256
int.from_bytes(b'\x00\x10', byteorder='little') # 4096
int.from_bytes(b'\xfc\x00', byteorder='big', signed=True) #-1024
int.from_bytes( bytes, byteorder, *, signed=False )
ne fonctionne pas avec moi J'ai utilisé la fonction de ce site Web, cela fonctionne bien
https://coderwall.com/p/x6xtxq/convert-bytes-to-int-or-int-to-bytes-in-python
def bytes_to_int(bytes):
result = 0
for b in bytes:
result = result * 256 + int(b)
return result
def int_to_bytes(value, length):
result = []
for i in range(0, length):
result.append(value >> (i * 8) & 0xff)
result.reverse()
return result