繁体   English   中英

使用Python struct.unpack和1字节变量

[英]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))

如果您已将数据作为字节串; 你可以使用bytearraymemoryview (后者在不同的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM