hexadecimal string to byte array in python

前端 未结 8 1818
孤城傲影
孤城傲影 2020-11-22 11:53

I have a long Hex string that represents a series of values of different types. I wish to convert this Hex String into a byte array so that I can shift each value out and co

相关标签:
8条回答
  • 2020-11-22 12:27

    You can use the Codecs module in the Python Standard Library, i.e.

    import codecs
    
    codecs.decode(hexstring, 'hex_codec')
    
    0 讨论(0)
  • 2020-11-22 12:30
    def hex2bin(s):
        hex_table = ['0000', '0001', '0010', '0011',
                     '0100', '0101', '0110', '0111',
                     '1000', '1001', '1010', '1011',
                     '1100', '1101', '1110', '1111']
        bits = ''
        for i in range(len(s)):
            bits += hex_table[int(s[i], base=16)]
        return bits
    
    0 讨论(0)
  • 2020-11-22 12:31

    Assuming you have a byte string like so

    "\x12\x45\x00\xAB"

    and you know the amount of bytes and their type you can also use this approach

    import struct
    
    bytes = '\x12\x45\x00\xAB'
    val = struct.unpack('<BBH', bytes)
    
    #val = (18, 69, 43776)
    

    As I specified little endian (using the '<' char) at the start of the format string the function returned the decimal equivalent.

    0x12 = 18

    0x45 = 69

    0xAB00 = 43776

    B is equal to one byte (8 bit) unsigned

    H is equal to two bytes (16 bit) unsigned

    More available characters and byte sizes can be found here

    The advantages are..

    You can specify more than one byte and the endian of the values

    Disadvantages..

    You really need to know the type and length of data your dealing with

    0 讨论(0)
  • 2020-11-22 12:37

    provided I understood correctly, you should look for binascii.unhexlify

    import binascii
    a='45222e'
    s=binascii.unhexlify(a)
    b=[ord(x) for x in s]
    
    0 讨论(0)
  • 2020-11-22 12:41

    You should be able to build a string holding the binary data using something like:

    data = "fef0babe"
    bits = ""
    for x in xrange(0, len(data), 2)
      bits += chr(int(data[x:x+2], 16))
    

    This is probably not the fastest way (many string appends), but quite simple using only core Python.

    0 讨论(0)
  • 2020-11-22 12:42

    Suppose your hex string is something like

    >>> hex_string = "deadbeef"
    

    Convert it to a string (Python ≤ 2.7):

    >>> hex_data = hex_string.decode("hex")
    >>> hex_data
    "\xde\xad\xbe\xef"
    

    or since Python 2.7 and Python 3.0:

    >>> bytes.fromhex(hex_string)  # Python ≥ 3
    b'\xde\xad\xbe\xef'
    
    >>> bytearray.fromhex(hex_string)
    bytearray(b'\xde\xad\xbe\xef')
    

    Note that bytes is an immutable version of bytearray.

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