/ / Est-ce que Python 3 to_bytes a été back-porté sur python 2.7? - python

Python 3 to_bytes a-t-il été rétroporté à Python 2.7? - python

C'est la fonction que je "m après: -

http://docs.python.org/3/library/stdtypes.html#int.to_bytes

J'ai besoin d'un grand support d'endianisme.

Réponses:

14 pour la réponse № 1

Sur la base de la réponse de @nneonneo, voici une fonction qui émule l'API to_bytes:

def to_bytes(n, length, endianess="big"):
h = "%x" % n
s = ("0"*(len(h) % 2) + h).zfill(length*2).decode("hex")
return s if endianess == "big" else s[::-1]

11 pour la réponse № 2

Pour répondre à votre question initiale, le to_bytes méthode pour int les objets n'ont pas été portés en retour sur Python 2.7 à partir de Python 3. Il a été considéré mais finalement rejeté. Voir la discussion ici.


7 pour la réponse № 3

Pour emballer de longueur arbitraire longs dans Python 2.x, vous pouvez utiliser les éléments suivants:

>>> n = 123456789012345678901234567890L
>>> h = "%x" % n
>>> s = ("0"*(len(h) % 2) + h).decode("hex")
>>> s
"x01x8exe9x0fxf6xc3sxe0xeeN?nxd2"

Cela renvoie le nombre dans l'ordre big-endian; pour le petit endian, inversez la chaîne (s[::-1]).


2 pour la réponse № 4

Vous pouvez probablement utiliser struct.pack au lieu:

>>> import struct
>>> struct.pack(">i", 123)
"x00x00x00{"

Il ne fait pas de longueurs arbitraires int.to_bytes mais je doute que vous en ayez besoin.