【发布时间】:2021-08-15 13:52:16
【问题描述】:
我有这样的配对:(-102,-56), (123, -56)。对中的第一个值表示低 8 位,第二个值表示高 8 位,两者都是有符号十进制形式。我需要将这些对转换为单个 16 位值。
我想我可以通过以下方式转换 (-102,-56) 对:
l = bin(-102 & 0b1111111111111111)[-8:]
u = bin(-56 & 0b1111111111111111)[-8:]
int(u+l,2)
但是当我尝试对 (123, -56) 对执行相同操作时,我收到以下错误:
ValueError: invalid literal for int() with base 2: '11001000b1111011'.
我知道这是由于不同值的长度不同,我需要将它们填充到 8 位。
我的做法完全错误吗?这样做的最佳方法是什么,以便它同时适用于负值和正值?
更新: 我能够通过以下方式解决这个问题:
low_int = 123
up_int = -56
(low_int & 0xFF) | ((up_int & 0xFF) << 8)
【问题讨论】:
-
预期输出是什么?
-
输入(-102,-56)时的预期输出是什么?对于 (123, -56)?
-
不幸的是我不知道。我所知道的就是我在问题中描述的内容。
标签: python binary data-conversion signed