web-dev-qa-db-fra.com

Octets en int - Python 3

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?

16
Vladimir Shevyakov

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
32
Peter DeGlopper
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
0
noura selem