在Python3.x中转换8位和7位值

2024-05-15 14:27:17 发布

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

我试图将无符号整数值转换为表示为4个7位字节的数值;目标是使用罗兰的地址映射MIDI系统专用协议发送数据,该协议表示如下地址和大小值:

MSB                                    LSB
---------    ---------    ---------    ---------
0aaa aaaa    0bbb bbbb    0ccc cccc    0ddd dddd

不幸的是,我真的不知道从哪里开始这样做;我们的目标是在Python3.x中实现这一点,我目前正在进行原型设计。我真正遇到的问题是数学和位操作,但奇怪的是,我甚至找不到任何通用的算法或经验法则。我发现的最接近的是大约十年前的Perl解决方案,但我在解读Perl方面也有点困难。除此之外,我只看到了几个C++问题,并用位元推荐答案。

对于一个特定的用法示例,假设我想要发送128字节的数据。这要求我只使用每个字节的低7位发送一个4字节大小的值。但是,该值通常为0x00000080,其中LSB中的高位为1,需要转换

对不起,如果这让人困惑,我可能离基地很远,但有人能告诉我正确的方向吗?我相信以前有人这样做过,因为它似乎会经常出现在MIDI编程中


Tags: 协议目标字节地址系统符号整数发送数据
1条回答
网友
1楼 · 发布于 2024-05-15 14:27:17

可变长度量(如链接问题)使用不同的编码

无论如何,要将一个值拆分为7位字节,请在每个步骤中提取最低的7位,然后将剩余值右移7位,以便下一步中的下一部分位于正确的位置:

def encode_as_4x7(value):
    result = []
    for i in range(4):
        result = [value & 0x7f] + result
        value >>= 7
    return result

相关问题 更多 >