Python 将十六进制字符串转换为十进制值

Python Converting hex string to decimal values

我得到的字符串结构如下:"\x0C\x00Maximilianus\xf4\x01",我想动态提取前两个和后两个字节并将它们转换为小数。编码应该是 UTF-8 little-endian unsigned。

"\x0C\x00" 等于 12

"\xf4\x01" 等于 500

我找不到任何能够做到这一点的函数。替换字符串中的“\x”也不起作用,因为我无法使用转义字符进行操作。

有什么想法吗?

您可以使用 struct 获取数字。

使用 table Format Characters 你可以看到你需要 "h" 来转换 2 字节整数。
您最终可以使用 "<h" 来确保它将使用 little-endian

import struct

# convert to bytes
data = "\x0C\x00Maximilianus\xf4\x01".encode('latin1')

# get short integer
number = struct.unpack('<h', data[:2])[0]
print('number:', number)

# skip number
data = data[2:]

# get string
#text = struct.unpack(f'{number}s', data[:number])[0] # use `number` to create `"12s"`
#print('text:', text.decode())
print('text:', data[:number].decode())

# skip string
data = data[number:]

# get short integer
number = struct.unpack('<h', data[:2])[0]
print('number:', number)

顺便说一句: 它看起来类似于 MessagePack 所以也许有专门的模块,但我不知道。

furas 的帮助下,这是我的最终解决方案:

data = "\x0C\x00Maximilianus\xf4\x01".encode('latin1')
name_len = int.from_bytes(data[:2],byteorder="little")
ending = int.from_bytes(data[-2:],byteorder="little")

print(name_len) # --> 12
print(ending) # --> 500