当第一个字节为零时,添加位会导致错误的数字

Adding bits cause wrong number when first byte is zero

我正在将 8 位整数合并为 32 位整数。当第一个字节为 0 时,python 出于某种原因将其解释为负数。

a = 0
b = -35
c = 64
d = 0
res = (a << 24) | (b << 16) | c << 8 | d   # res = -2277376 instead of 14499840

我需要 res 为 14499840 而不是 -2277376。我有什么办法可以强制 python 不要忽略前 8 位?

不是因为a为零,而是因为b是负数:

>>> res = (a << 24) | (b << 16) | c << 8 | d
>>> res
-2277376
>>> b << 16
-2293760

因此,如果字节可以为负数,则需要先通过使用 0xFF 进行屏蔽使它们为正数:

res = ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | (d & 0xFF)

或者最好将输入读取为无符号字节而不是有符号字节