Has Python 3 to_bytes been back-ported to python 2.7?

前端 未结 4 1278
没有蜡笔的小新
没有蜡笔的小新 2020-11-30 12:07

This is the function I\'m after: -

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

I need big endianness support.

相关标签:
4条回答
  • 2020-11-30 12:11

    You can probably use struct.pack instead:

    >>> import struct
    >>> struct.pack('>i', 123)
    '\x00\x00\x00{'
    

    It doesn't do arbitrary lengths in the way int.to_bytes does, but I doubt you need that.

    0 讨论(0)
  • 2020-11-30 12:27

    To pack arbitrary-length longs in Python 2.x, you can use the following:

    >>> n = 123456789012345678901234567890L
    >>> h = '%x' % n
    >>> s = ('0'*(len(h) % 2) + h).decode('hex')
    >>> s
    '\x01\x8e\xe9\x0f\xf6\xc3s\xe0\xeeN?\n\xd2'
    

    This outputs the number in big-endian order; for little endian, reverse the string (s[::-1]).

    0 讨论(0)
  • 2020-11-30 12:34

    Based on the answer from @nneonneo, here is a function that emulates the to_bytes API:

    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]
    
    0 讨论(0)
  • 2020-11-30 12:36

    To answer your original question, the to_bytes method for int objects was not back ported to Python 2.7 from Python 3. It was considered but ultimately rejected. See the discussion here.

    0 讨论(0)
提交回复
热议问题