我有一个文本文件,它实际上包含程序存储的十六进制值。例如 file.txt 将包含:
4D 45 5A 4E 53 41 54
我需要转换原始数据才能理解它,具体来说我需要取两个字节并将它们转换成一个整数。这是我采用的方法:
首先,我根据空格将文本文件拆分为一个数组。然后我将数组转换为字节数组。
beacon = beacon.split()
beaconBytes = [byte.encode('utf-8') for byte in beacon]
现在看起来像这样:
[b'4D', b'45', b'5A', b'4E', b'53', b'41', b'54']
由于数据以小端方式传输,前两个字节应转换为 0x454d = 17741。
但为什么会这样:
int.from_bytes(beaconBytes[0]+beaconBytes[1], byteorder='little', signed=False)
打印 892617780?这么庞大的数字从何而来?
最佳答案
“bytes”对象实际上具有 CHARS ‘4’、‘D’等值(与值 4、13 或其他由 0-9A- 表示的十六进制值不同) F).
要将十六进制字符串转换为 int 值,您可以简单地使用以 16
为底的 int
,如下所示:
beacon = '4D 45 5A 4E 53 41 54'.split()
firstValHexStr = beacon[1]+beacon[0] # 454D
firstValInt = int(firstValHexStr,16)
print(firstValInt)
输出:
17741
根本不需要遍历 bytes
对象 :)
关于python - 将字符串的子字符串转换为字节然后转换为python中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61039431/