web-dev-qa-db-fra.com

python 2,7 équivalent de la méthode intégrée int.from_bytes

J'essaie de rendre mon projet compatible python2.7 et 3 et python 3 a la méthode intégrée int.from_bytes. L'équivalent existe-t-il dans python 2.7 ou plutôt quelle serait la meilleure façon de rendre ce code 2.7 et 3 compatible?

>>> int.from_bytes(b"f483", byteorder="big")
1714698291
14
Fabian Barkhau

Vous pouvez le traiter comme un encodage (spécifique à Python 2):

>>> int('f483'.encode('hex'), 16)
1714698291

Ou en Python 2 et Python 3:

>>> int(codecs.encode(b'f483', 'hex'), 16)
1714698291

L'avantage est que la chaîne n'est pas limitée à une hypothèse de taille spécifique. L'inconvénient est qu'il n'est pas signé.

23
dawg
struct.unpack(">i","f483")[0]

peut être?

> signifie big-endian et i signifie int 32 bits signé

voir aussi: https://docs.python.org/2/library/struct.html

8
Joran Beasley

Utilisez le module struct pour décompresser vos octets en nombres entiers.

import struct
>>> struct.unpack("<L", "y\xcc\xa6\xbb")[0]
3148270713L
5
SanketDG
> import binascii

> barray = bytearray([0xAB, 0xCD, 0xEF])
> n = int(binascii.hexlify(barray), 16)
> print("0x%02X" % n)

0xABCDEF
0
Dan