programing

python의 바이트 배열에 대한 16진수 문자열

newsource 2022. 10. 26. 21:07

python의 바이트 배열에 대한 16진수 문자열

다른 유형의 일련의 값을 나타내는 긴 16진수 문자열이 있습니다.이 Hex String을 바이트 배열로 변환하여 각 값을 변환하고 적절한 데이터 유형으로 변환합니다.

당신의 16진수 문자열이

>>> hex_string = "deadbeef"

Bearray로 변환합니다(Python 3 및 2.7).

>>> bytearray.fromhex(hex_string)
bytearray(b'\xde\xad\xbe\xef')

바이트 개체(Python 3)로 변환:

>>> bytes.fromhex(hex_string)
b'\xde\xad\xbe\xef'

주의:bytes의 불변의 버전입니다.bytearray.

문자열로 변환(Python ≤ 2.7):

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

바이얼레이에는 의도한 대로 기능하는 기능이 내장되어 있습니다.

bytearray.fromhex("de ad be ef 00")

공백 구분자를 포함하거나 포함하지 않고 16진수 문자열을 읽습니다.

제가 제대로 이해했다면 binascii를 찾으세요.헥실화하다

import binascii
a='45222e'
s=binascii.unhexlify(a)
b=[ord(x) for x in s]

다음과 같은 바이트 문자열이 있다고 가정합니다.

"\x12\x45\x00\xAB"

또한 바이트의 양과 그 유형을 알고 있습니다.이 접근방식을 사용할 수도 있습니다.

import struct

bytes = '\x12\x45\x00\xAB'
val = struct.unpack('<BBH', bytes)

#val = (18, 69, 43776)

형식 문자열의 선두에 little endian('<' 문자 사용)을 지정했더니 함수는 10진수 등가를 반환했습니다.

0x12 = 18

0x45 = 69

0xAB00 = 43776

B는 부호 없는 1바이트(8비트)와 같습니다.

H는 부호 없는 2바이트(16비트)와 같습니다.

사용 가능한 더 많은 문자 및 바이트 크기는 여기에서 확인할 수 있습니다.

장점은...

두 개 이상의 바이트와 값의 endian을 지정할 수 있습니다.

단점...

취급하는 데이터의 유형과 길이를 알아야 합니다.

Python Standard Library의 Codecs 모듈을 사용할 수 있습니다.

import codecs

codecs.decode(hexstring, 'hex_codec')

다음과 같은 방법으로 바이너리 데이터를 유지하는 문자열을 작성할 수 있어야 합니다.

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

이것은 아마도 가장 빠른 방법은 아니지만(많은 문자열이 추가됨), 코어 Python만을 사용하는 것은 매우 간단합니다.

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

좋은 라이너는 다음과 같습니다.

byte_list = map(ord, hex_string)

그러면 문자열 내의 각 문자에 대해 반복되며 ord() 함수를 통해 실행됩니다.python 2.6에서만 테스트되었으며 3.0+에 대해서는 잘 모르겠습니다.

- 조쉬

언급URL : https://stackoverflow.com/questions/5649407/hexadecimal-string-to-byte-array-in-python