development

파이썬에서 16 진수 문자열을 바이트 배열로

big-blog 2020. 7. 6. 06:56
반응형

파이썬에서 16 진수 문자열을 바이트 배열로


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


16 진 문자열이 다음과 같다고 가정하십시오.

>>> hex_string = "deadbeef"

문자열로 변환하십시오 (Python ≤ 2.7).

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

또는 Python 2.7 및 Python 3.0 이후 :

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

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

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


bytearray에는 의도 한 기능을 수행하는 내장 함수가 있습니다.

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)

형식 문자열의 시작 부분에 리틀 엔디안 ( '<'char 사용)을 지정함에 따라 함수는 10 진수를 반환했습니다.

0x12 = 18

0x45 = 69

0xAB00 = 43776

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

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

더 많은 문자 및 바이트 크기는 여기에서 찾을 수 있습니다

장점은 ..

하나 이상의 바이트와 값의 엔디안을 지정할 수 있습니다

단점

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


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

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

이것은 아마도 가장 빠른 방법은 아니지만 (많은 문자열 추가) 핵심 Python 만 사용하면 매우 간단합니다.


파이썬 표준 라이브러리에서 코덱 모듈사용할 수 있습니다.

import codecs

codecs.decode(hexstring, 'hex_codec')

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)

This will iterate over each char in the string and run it through the ord() function. Only tested on python 2.6, not too sure about 3.0+.

-Josh

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

반응형