使用python将上下8位转换为一个值

使用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位 我是不是完全错了?这样做的最好方法是什么,这样它可以同时对负值和

我有这样的一对:(-102,-56),(123,-56)。成对的第一个值表示低位8位,第二个值表示高位8位,两者均为有符号十进制形式。我需要将这些对转换为单个16位值

我想我能够通过以下方式转换(-102,-56)对:

但当我尝试对(123,-56)对执行相同操作时,我得到以下错误:

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