python - 当第一个字节为零时,添加位会导致错误的数字
问题描述
我将 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)
或者更好地将输入读取为无符号字节而不是有符号
推荐阅读
- angularjs - 将 angularJS 值发送到 MVC 操作
- angular - 角材料2不起作用
- html - Youtube iframe src 自动播放在 Chrome 浏览器中不起作用
- php - 我的简单搜索引擎有问题
- apache-spark - Spark:在每个分区中变得不同
- ios - JusPayExpress 结帐错误 - JSURLNotPassed (102)
- html - 清理 htaccess 文件以指示 cPanel 中的重定向
- javascript - email() 不是通过 onclick 属性实现的功能
- java - 正则表达式在java中的字符串中查找特定模式
- db2 - 合并包含时间范围的连续重复记录