在python中将16位的最高字节转换为signed int

时间:2012-06-15 19:12:32

标签: python type-conversion bit-shift

我使用os.system来运行make命令

os.system('make -C mydir/project all')

我想知道make是否失败。系统文档指出返回代码的格式与wait()

的格式相同
Wait for completion of a child process, and return a tuple containing its pid 
and exit status indication: a 16-bit number, whose low byte is the signal number 
that killed the process, and whose high byte is the exit status (if the signal 
number is zero); the high bit of the low byte is set if a core file was produced.

所以如果make(或另一个应用程序)返回-1,我必须将0xFFxx(我真的不关心被调用的pid)转换为-1。右移后,我得到0xFF,但我无法将其转换为-1,它总是打印255.

那么,在python中,如何将255转换为-1,或者如何告诉解释器我的255实际上是8位有符号整数?

2 个答案:

答案 0 :(得分:7)

if number > 127:
  number -= 256

答案 1 :(得分:3)

尽管Ignacio的答案对于这种情况可能更好,但是用于从特殊格式的数据中解包字节的一个很好的通用工具是struct

>>> val = (255 << 8) + 13
>>> struct.unpack('bb', struct.pack('H', val))
(13, -1)