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
'programing' 카테고리의 다른 글
Java 메서드에서 불필요한 반환을 방지하려면 어떻게 해야 합니까? (0) | 2022.10.26 |
---|---|
JPA 2에서 CriteriaQuery를 사용하여 결과를 카운트하는 방법 (0) | 2022.10.26 |
랜덤 (Java 7)의 181783497276652981 및 8682522807148012는 무엇입니까? (0) | 2022.10.26 |
이미 데이터가 포함된 MariaDB 테이블에 키를 추가하려면 어떻게 해야 합니까? (0) | 2022.10.26 |
파일에 기록하고 stdout에 인쇄하는 로거 구성 (0) | 2022.10.26 |