[英]Using Python struct.unpack with 1-byte variables
如何使用struct.unpack()
或Python中的其他一些函数轻松地将一个字节变量转换为Python整数? 现在,它以一种相当蹩脚的方式完成:
file = open("telemetry.dat", "rb").read()
magic = file[0]
int(binascii.hexlify(magic), 16)
还有另一个吗?
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字节变量的struct.unpack() ; 看下面的例子:
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。 如果您需要不同的东西,请查看文档的格式字符部分 (例如,有符号的int,对于解包函数调用的'fmt'参数,它将是'> h')。
将文件中的每个字节解释为整数的有效方法是使用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
对于表示为bytestring的单个字节,您可以使用@jsbueno建议的 ord()
:
i = ord(b"d") # -> 100
你在询问struct.unpack( 'b', someByte )
吗?
“byte”是1个字符的字符串。
值0xff
是一个整数,并且已经解压缩。
如果您在输入文件中找到4个字符的值0xff
,则最好由eval()
提供服务,因为您的输入文件包含Python代码0xff
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.