2

Firmata/シリアル リンク経由で送信するために、32 ビットの符号付き long を 7 ビットの int に変換する (Python での) 最良の方法は何ですか? 8 ビットへの変換は問題ではありません(long_val).to_bytes(4, 'little')。最終的なシーケンスは次のようになります。

No 1, bits 0-6
No 2, bits 7-13
No 3, bits 14-20
No 4, bits 21-27
No 5, bits 28-32

7 ビット int の 5 項目シーケンスから 32 ビット符号付き long への後方変換も非常に役立ちます。

s = bin(pos)[2:].zfill(32)
cmd = bytearray([acc.ACCELSTEPPER_TO, dev_no,
int(s[28:32], 2), int(s[21:28], 2), int(s[14:21], 2),
int(s[7:14], 2), int(s[0:7], 2)])
brd.send_sysex(acc.ACCELSTEPPER_DATA, cmd)

私の方法は残念ながら間違った結果をもたらしたので、それらを完全に破棄して最初からやり直したいと思います。提案をお寄せいただきありがとうございます。

4

2 に答える 2

1

一度に 7 ビットずつ変換を行うだけです。

bytes = []
for i in range(5):
    bytes.append(long_value & 0x7f)
    long_value >>= 7
long_value = 0
for i in reversed(range(5)):
    long_value <<= 7
    long_value |= bytes[i]
于 2020-06-27T18:17:20.613 に答える