9個の数字を持つデータパッケージをアンパックすると、各数字は3の2の補数形式になります。したがって私のパッケージの27バイト。 私は私が4つのバイトの数字でstruct.unpack
を使用することができますが、16各3バイトが2の補数である27バイトの配列を数値に変換する方法は?
作品で私の数字を掛け合わが、私は持っているだろう4バイトの2の補数の場合は16
data = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
a = a[:3] + [0] + a[3:6] + [0] + a[6:9] + [0] + a[9:12] + [0] + a[12:15] + [0] + a[15:18] + a[18:21] + [0] + [0] + a[21:24] + [0] + a[24:27] + [0]
ch0, ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8 = struct.unpack('>lllllllll', bytearray(a))
によって出力を乗算され、これを持っています負の数の前に0xFFを、正の数の前に0x00を追加します。
これを実行するスマートな方法はありますか?それを行う最も効率的な方法は何ですか?
もしそれ倍数出力により、 16、なぜちょうど 'ch0 >> 4'をやって、なぜ' ch0'を2^4 = 16で割りますか? –