How can I convert two bytes of an integer back into an integer in Python?
我目前使用的是一个
我设法将原始数据分成两个字节,以便将其发送到脚本,但在重建原始整数时遇到了一些困难。
我尝试使用基本的位运算符(<<,>等),就像我在C++程序中所做的那样,但是它似乎不起作用。
我怀疑这与数据类型有关。在同一个操作中,我可能使用的是带字节的整数,但我不能真正分辨每个变量所持有的类型,因为据我所知,您并不真正在python中声明变量(我对python非常陌生)。
1 2 | self.pot=self.myline[2]<<8 self.pot|=self.myline[3] |
您可以使用
1 2 3 4 5 | >>> import struct >>> struct.pack('>H', 12345) '09' >>> struct.unpack('>H', '09') (12345,) |
其他的可能性有:有符号字节的
假设存储在
1 2 3 4 | myline = [0, 1, 2, 3] pot = myline[2]<<8 | myline[3] print 'pot: {:d}, 0x{:04x}'.format(pot, pot) # outputs"pot: 515, 0x0203" |
否则,如果它是低字节优先,则需要用相反的方法:
1 2 3 4 | myline = [0, 1, 2, 3] pot = myline[3]<<8 | myline[2] print 'pot: {:d}, 0x{:04x}'.format(pot, pot) # outputs"pot: 770, 0x0302" |
这完全有效:
1 2 3 4 | long = 500 first = long & 0xff #244 second = long >> 8 #1 result = (second << 8) + first #500 |
如果您不确定"myline"中的类型,请检查堆栈溢出问题如何确定python中的变量类型?.
要将字节或字符转换为它所代表的数字,请使用
1 2 3 4 5 6 7 | >>> number = 3**9 >>> hibyte = chr(number / 256) >>> lobyte = chr(number % 256) >>> hibyte, lobyte ('L', '\xe3') >>> print number == (ord(hibyte) << 8) + ord(lobyte) True |
如果您的