在python中将字符串的子字符串转换为字节,然后再转换为整数

2024-05-29 02:07:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件,它实际上包含由程序存储的十六进制值。例如,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?这个庞大的数字是从哪里来的


Tags: 文件方法程序txt原始数据字节整数数组
2条回答

“bytes”对象实际上具有字符“4”、“D”等的值(这与值4、13或由0-9A-F表示的其他十六进制值不同)

要将十六进制字符串转换为int值,只需使用以int为基数的16,如下所示:

beacon = '4D 45 5A 4E 53 41 54'.split()
firstValHexStr = beacon[1]+beacon[0] # 454D
firstValInt = int(firstValHexStr,16)
print(firstValInt)

输出:

17741

根本不需要通过bytes对象:)

encode不会做你认为它会做的事。它只是改变字符编码。应使用int将十六进制字符串转换为整数:

bytes = [chr(int(x, 16)).encode() for x in beacon.split()]
#[b'M', b'E', b'Z', b'N', b'S', b'A', b'T']
int.from_bytes(bytes[0]+bytes[1], byteorder='little', signed=False)
#17741

相关问题 更多 >

    热门问题