파이썬에서 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
'development' 카테고리의 다른 글
필드가 많거나 많은 Django 모델의 객체를 만드는 방법은 무엇입니까? (0) | 2020.07.06 |
---|---|
SDK iOS 8.0의 제품 유형 단위 테스트 번들에는 코드 서명이 필요합니다. (0) | 2020.07.06 |
AppCompat-v7을 사용하여 작업 표시 줄 / 도구 모음에 아이콘 표시 21 (0) | 2020.07.06 |
git / git-shell 관련 문제를 어떻게 디버깅 할 수 있습니까? (0) | 2020.07.06 |
"aapt"IOException error = 2, 그런 파일이나 디렉토리가 없습니다 "jenkins에서 gradle을 빌드 할 수없는 이유는 무엇입니까? (0) | 2020.07.06 |