如何使用struct.unpack()
或Python中的其他一些功能轻松将一个字节变量转换为Python整数?现在,它以一种相当蹩脚的方式完成:
file = open("telemetry.dat", "rb").read()
magic = file[0]
int(binascii.hexlify(magic), 16)
还有另一个吗?
答案 0 :(得分:7)
ord(my_byte)
怎么样?
或者,如果变量内容与my_byte == "0xff"
或ff
相似
你可以简单地做int(my_byte, 16)
如果您有十六进制数字流,则可以执行以下操作:
int_bytes = (int(my_bytes[i:i+2], 16) for i in xrange(0, len(my_bytes), 2) )
答案 1 :(得分:0)
是的,您可以将struct.unpack()与1字节变量一起使用;见下面的例子:
import struct
my_byte = b'\x07';
my_int = struct.unpack('>H', b'\x00' + my_byte)[0]
print type(my_int)
print my_int
上面的例子假设你的int是unsigned int。如果您需要不同的东西,请查看Format Characters section of the documentation(例如,签名的int,对于解包函数调用的'fmt'参数,它将是'> h'。)
答案 2 :(得分:0)
将文件中的每个字节解释为整数的有效方法是使用array
模块:
import os
from array import array
a = array("B") # interpret each byte as unsigned integer [0, 255]
with open("telemetry.dat", "rb") as file:
a.fromfile(file, os.path.getsize(file.name))
如果您已将数据作为字节串;您可以使用bytearray
或memoryview
(后者在不同的Python版本上表现不同):
data = b"\xff\x64d"
# a.fromstring(data)
b = bytearray(data)
print(b[0]) # -> 255
这是返回元组的相应struct.unpack()
模拟(更通用):
import struct
data = b"\xff\x64d"
t = struct.unpack(len(data)*"B", data)
print(t[-1]) # -> 100
对于表示为字节字符串的单个字节,您可以使用ord()
suggested by @jsbueno:
i = ord(b"d") # -> 100
答案 3 :(得分:-7)
您是在询问struct.unpack( 'b', someByte )
吗?
“byte”是1个字符的字符串。
值0xff
是一个整数,并且已经解压缩。
如果您在输入文件中找到4个字符的值0xff
,那么您最好由eval()
提供服务,因为您的输入文件包含Python代码0xff
。