Jest to funkcja, po której: -
http://docs.python.org/3/library/stdtypes.html#int.to_bytes
Potrzebuję dużego wsparcia endianizmu.
Odpowiedzi:
14 dla odpowiedzi № 1Na podstawie odpowiedzi @nneonneo, oto funkcja, która emuluje 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 dla odpowiedzi nr 2
Aby odpowiedzieć na twoje oryginalne pytanie, to_bytes
metoda dla int
obiekty nie zostały ponownie przeniesione do Pythona 2.7 z Pythona 3. Zostało to rozważone, ale ostatecznie odrzucone. Zobacz dyskusję tutaj.
7 dla odpowiedzi nr 3
Aby spakować dowolną długość long
W Pythonie 2.x można użyć następujących opcji:
>>> n = 123456789012345678901234567890L
>>> h = "%x" % n
>>> s = ("0"*(len(h) % 2) + h).decode("hex")
>>> s
"x01x8exe9x0fxf6xc3sxe0xeeN?nxd2"
Daje to liczbę w kolejności big-endian; dla little endian odwróć ciąg znaków (s[::-1]
).
2 dla odpowiedzi № 4
Prawdopodobnie możesz użyć struct.pack
zamiast:
>>> import struct
>>> struct.pack(">i", 123)
"x00x00x00{"
Nie przeszkadza to w ustalaniu dowolnych długości int.to_bytes
tak, ale wątpię, żebyś tego potrzebował.