Pythonで符号付き8bit整数を扱う(2の補数)
Raspberry Piで他の機器からSPIでsinged char(符号付き8bit)のデータをもらって、Pythonで処理しようとしたが、Pythonで2の補数で10進数に変換できなくて困った。 調べたところ、Pythonの標準関数ではできないそう. stackoverflowにのっていた関数を使わさせてもらって、簡単にできた.
Raspberry Piで他の機器からSPIでsinged char(符号付き8bit)のデータをもらって、Pythonで処理しようとしたが、Pythonで2の補数で10進数に変換できなくて困った。
調べたところ、Pythonの標準関数ではできないそう. stackoverflowにのっていた関数を使わさせてもらって、簡単にできた.
http://stackoverflow.com/questions/1604464/twos-complement-in-python
符号付き8bitを10進数に変換
>>> def s8(value):
... return -(value & 0b10000000) | (value & 0b01111111)
このような関数s8を定義すれば
>>> s8(int('11111',2))
31
>>> s8(int('11111111',2))
-1
>>> s8(int('11111100',2))
-4
と符号付き8bitを10進数に変換できた。
符号付き16bitの場合
>>> def s16(value):
... return -(value & 0b1000000000000000) | (value & 0b0111111111111111)
Share this post
Twitter
Facebook
LinkedIn