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 № 1Sur 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 long
s 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.