Ric*_*ard 130 python bytearray
我有一个长十六进制字符串,表示一系列不同类型的值.我希望将此Hex字符串转换为字节数组,以便我可以将每个值移出并将其转换为适当的数据类型.
tzo*_*zot 206
假设你的十六进制字符串是这样的
>>> hex_string = "deadbeef"
Run Code Online (Sandbox Code Playgroud)
>>> hex_data = hex_string.decode("hex")
>>> hex_data
"\xde\xad\xbe\xef"
Run Code Online (Sandbox Code Playgroud)
>>> bytes.fromhex(hex_string) # Python ? 3
b'\xde\xad\xbe\xef'
>>> bytearray.fromhex(hex_string)
bytearray(b'\xde\xad\xbe\xef')
Run Code Online (Sandbox Code Playgroud)
注意,这bytes
是一个不可变的版本bytearray
.
小智 133
在bytearray中有一个内置函数可以执行您想要的操作.
bytearray.fromhex("de ad be ef 00")
Run Code Online (Sandbox Code Playgroud)
它返回一个bytearray,它读取带或不带空格分隔符的十六进制字符串.
Bru*_*uce 14
如果我理解正确,你应该寻找binascii.unhexlify
import binascii
a='45222e'
s=binascii.unhexlify(a)
b=[ord(x) for x in s]
Run Code Online (Sandbox Code Playgroud)
假设你有一个像这样的字节串
“ \ x12 \ x45 \ x00 \ xAB”
而且您知道字节数及其类型,也可以使用这种方法
import struct
bytes = '\x12\x45\x00\xAB'
val = struct.unpack('<BBH', bytes)
#val = (18, 69, 43776)
Run Code Online (Sandbox Code Playgroud)
当我在格式字符串的开头指定了小尾数(使用'<'字符)时,该函数返回了十进制等效值。
0x12 = 18
0x45 = 69
0xAB00 = 43776
B等于一个字节(8位)无符号
H等于两个字节(16位)无符号
优点是..
您可以指定多个字节和值的字节序
缺点
您确实需要知道处理的数据的类型和长度
归档时间: |
|
查看次数: |
257420 次 |
最近记录: |