使用python将上下8位转换为一个值
我有这样的一对:(-102,-56),(123,-56)。成对的第一个值表示低位8位,第二个值表示高位8位,两者均为有符号十进制形式。我需要将这些对转换为单个16位值 我想我能够通过以下方式转换(-102,-56)对: 但当我尝试对(123,-56)对执行相同操作时,我得到以下错误:使用python将上下8位转换为一个值,python,binary,data-conversion,signed,Python,Binary,Data Conversion,Signed,我有这样的一对:(-102,-56),(123,-56)。成对的第一个值表示低位8位,第二个值表示高位8位,两者均为有符号十进制形式。我需要将这些对转换为单个16位值 我想我能够通过以下方式转换(-102,-56)对: 但当我尝试对(123,-56)对执行相同操作时,我得到以下错误: ValueError:以2为基数的int()的文本无效:“11001000b1111011” 我知道这是因为不同值的长度不同,我需要将它们填充到8位 我是不是完全错了?这样做的最好方法是什么,这样它可以同时对负值和
ValueError:以2为基数的int()的文本无效:“11001000b1111011”
我知道这是因为不同值的长度不同,我需要将它们填充到8位
我是不是完全错了?这样做的最好方法是什么,这样它可以同时对负值和正值起作用
更新:
我通过以下方式解决了这个问题:
low_int = 123
up_int = -56
(low_int & 0xFF) | ((up_int & 0xFF) << 8)
low_int=123
up_int=-56
(low_int&0xFF)|((up_int&0xFF)您可以尝试将第一个值移位8位:尝试使用此处描述的逻辑
l, u = -102 & 255, -56 & 255
# shift 8 bits to left
u << 8 + l
l,u=-102和255,-56和255
#向左移位8位
u按位操作可以,但不是严格要求的
在8位最常见的2补码表示法中:
-1 signed == 255 unsigned
-2 signed == 254 unsigned
...
-127 signed = 129 usigned
-128 signed = 128 usigned
两个绝对值的总和总是256
使用此选项可转换负值:
if b < 0:
b += 256
期望输出是什么?当你输入(-102,-56)和(123,-56)时,期望输出是什么?不幸的是,我不知道。我所知道的就是我在问题中描述的。
if b < 0:
b += 256
value = 256 * hi8 + lo8