从2字节big-endian(摩托罗拉)字节数组中提取12位整数

2024-06-06 19:08:45 发布

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

我试图提取一个整数,它在一个2字节(16位)的消息中占据12位,这是一种big-endian格式。我已经做了一些研究,并希望我将不得不使用位操作(位移位)来实现这一点,但我不确定如何将其应用于big-endian格式

这里有几个答案使用了python'Numpy'包,但我在Micropython上没有访问该包的权限。我确实可以访问“ucruct”模块,我使用它来解压缩消息的某些其他部分,但它似乎只适用于8位、16位和32位消息

到目前为止,我唯一想到的是:

int12 = (byte1 << 4) + (byte2)
expected_value = int.from_bytes(int12)

但这并没有给我我期望的数字。例如0x02,0x15应该表示十进制533。 我哪里做错了

我是位操作和从字节中提取数据的新手,因此非常感谢您的帮助,谢谢


Tags: 模块答案numpy消息权限字节格式micropython
1条回答
网友
1楼 · 发布于 2024-06-06 19:08:45

这应该起作用:

import struct

val, _ = struct.unpack( '!h', b'23' )
val = (val >> 4) & 0xFFF

给出:

>>> hex(val)
'0x333'

但是,您应该检查16位中有哪些12位被占用。我以前的代码假设这些是上面的3个半字节。如果数字占用较低的3个半字节,则不需要任何移位,只需使用0xFFF的掩码即可

相关问题 更多 >