Byte Array in Python

后端 未结 4 1063
小蘑菇
小蘑菇 2020-12-04 15:23

How can I represent a byte array (like in Java with byte[]) in Python? I\'ll need to send it over the wire with gevent.

byte key[] = {0x13, 0x00, 0x00, 0x00,         


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

    Just use a bytearray (Python 2.6 and later) which represents a mutable sequence of bytes

    >>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
    >>> key
    bytearray(b'\x13\x00\x00\x00\x08\x00')
    

    Indexing get and sets the individual bytes

    >>> key[0]
    19
    >>> key[1]=0xff
    >>> key
    bytearray(b'\x13\xff\x00\x00\x08\x00')
    

    and if you need it as a str (or bytes in Python 3), it's as simple as

    >>> bytes(key)
    '\x13\xff\x00\x00\x08\x00'
    
    0 讨论(0)
  • 2020-12-04 15:34

    Dietrich's answer is probably just the thing you need for what you describe, sending bytes, but a closer analogue to the code you've provided for example would be using the bytearray type.

    >>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
    >>> bytes(key)
    b'\x13\x00\x00\x00\x08\x00'
    >>> 
    
    0 讨论(0)
  • 2020-12-04 15:35

    An alternative that also has the added benefit of easily logging its output:

    hexs = "13 00 00 00 08 00"
    logging.debug(hexs)
    key = bytearray.fromhex(hexs)
    

    allows you to do easy substitutions like so:

    hexs = "13 00 00 00 08 {:02X}".format(someByte)
    logging.debug(hexs)
    key = bytearray.fromhex(hexs)
    
    0 讨论(0)
  • 2020-12-04 15:48

    In Python 3, we use the bytes object, also known as str in Python 2.

    # Python 3
    key = bytes([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
    
    # Python 2
    key = ''.join(chr(x) for x in [0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
    

    I find it more convenient to use the base64 module...

    # Python 3
    key = base64.b16decode(b'130000000800')
    
    # Python 2
    key = base64.b16decode('130000000800')
    

    You can also use literals...

    # Python 3
    key = b'\x13\0\0\0\x08\0'
    
    # Python 2
    key = '\x13\0\0\0\x08\0'
    
    0 讨论(0)
提交回复
热议问题