/ / Чи було Python 3 to_bytes перенесено назад на python 2.7? - пітон

Чи підтримує Python 3 to_bytes back-ported до python 2.7? - python

Це функція, яку я "м після: -

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

Пакувати довільну довжину longs в 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 так, але я сумніваюся, що це вам потрібно.