Це функція, яку я "м після: -
http://docs.python.org/3/library/stdtypes.html#int.to_bytes
Мені потрібна велика підтримка ендіансу.
Відповіді:
14 за відповідь № 1На основі відповіді від @nneonneo, ось функція, яка емулює 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 для відповіді № 2
Щоб відповісти на ваше початкове запитання, to_bytes
метод для int
об'єктів не було перенесено назад на Python 2.7 з Python 3. Це було розглянуто, але в підсумку відхилено. Див. Дискусію тут.
7 для відповіді № 3
Пакувати довільну довжину long
s в Python 2.x, ви можете використовувати наступне:
>>> n = 123456789012345678901234567890L
>>> h = "%x" % n
>>> s = ("0"*(len(h) % 2) + h).decode("hex")
>>> s
"x01x8exe9x0fxf6xc3sxe0xeeN?nxd2"
Це виводить число у порядку великого ендіана; для маленького ендіана поверніть рядок назад (s[::-1]
)
2 для відповіді № 4
Ви, ймовірно, можете скористатись struct.pack
замість цього:
>>> import struct
>>> struct.pack(">i", 123)
"x00x00x00{"
Це не робить довільної довжини на шляху int.to_bytes
так, але я сумніваюся, що це вам потрібно.