답변:
16 진 문자열이 다음과 같다고 가정하십시오.
>>> hex_string = "deadbeef"
>>> hex_data = hex_string.decode("hex")
>>> hex_data
"\xde\xad\xbe\xef"
>>> bytes.fromhex(hex_string) # Python ≥ 3
b'\xde\xad\xbe\xef'
>>> bytearray.fromhex(hex_string)
bytearray(b'\xde\xad\xbe\xef')
주 bytes
의 불변의 버전입니다 bytearray
.
string
-> bytes
객체를 찾고 있다면 `bytes.fromhex ( "000102030405060708090A0B0C0D0E0F")`입니다 b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
. 질문에 바이트 배열을 요구하기 때문에 답변으로 게시하지 않지만 바이트 옆을 검색 할 때 얻은 첫 번째 히트이므로 여기에 게시하십시오.
hex_string.decode("hex")
는 Python 2.7에서 작업하고 있습니다. 방금 테스트했습니다 Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32
.
bytes.fromhex
입력 문자열은 문자의 홀수가있는 경우 오류가 발생합니다 : bytes.fromhex("aab")
→ ValueError: non-hexadecimal number found in fromhex() arg at position 3
.
bytearray에는 의도 한 기능을 수행하는 내장 함수가 있습니다.
bytearray.fromhex("de ad be ef 00")
바이트 배열을 반환하고 공백 구분 기호가 있거나없는 16 진 문자열을 읽습니다.
hex_string.decode("hex")
그렇지 않습니다.
내가 올바르게 이해했다면 binascii를 찾아야합니다.
import binascii
a='45222e'
s=binascii.unhexlify(a)
b=[ord(x) for x in s]
unhexlify
가장 효율적인 방법 이라는 데 동의 하지만을 사용하는 b = bytearray(s)
것보다 낫습니다 ord
. 파이썬은 바이트 배열만을위한 내장 타입을 가지고 있기 때문에 아무도 그것을 사용하지 않는 것에 놀랐습니다
바이트 문자열이 있다고 가정하면
"\ 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 비트)와 같습니다.
더 많은 문자 및 바이트 크기는 여기에서 찾을 수 있습니다
장점은 ..
하나 이상의 바이트와 값의 엔디안을 지정할 수 있습니다
단점
처리하는 데이터의 유형과 길이를 알아야합니다.
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 () 함수를 통해 실행합니다. 파이썬 2.6에서만 테스트되었으며 3.0 이상은 확실하지 않습니다.
-조롱
byte_list = bytearray(hex_string)