当我用括号包装每个班次时,这个python语句给出了期望值,否则它给出0:
Coef = ((0xFF&resp[0])<<24) + ((0xFF&resp[1])<<16) + ((0xFF&resp[2])<<8) +(0xFF&resp[3])) #OK
Coef = (0xFF&resp[0])<<24 + (0xFF&resp[1])<<16 + (0xFF&resp[2])<<8 +0xFF&resp[3]) #NOK
从我作为C开发人员的角度来看,考虑到 Coef 和 resp 都是 unsigned ints ,这些语句应该是等价的
我的猜测是,当括号不存在时,Python对var的类型感到困惑。
答案 0 :(得分:5)
与类型无关; +
的优先级高于<<
。 (在C中也是这种情况。)您的表达式被解析为:
((0xFF & resp[0])
<< (24 + (0xFF & resp[1]))
<< (16 + (0xFF & resp[2]))
<< (8 + 0xFF & resp[3]))
此外,如果resp
是bytes
( 很有可能),您可以:
int.from_bytes(resp[:4], 'big')
如果 因某种原因使用Python 2,struct.unpack
可以完成相同的工作:
Coef, = struct.unpack('>I', resp[:4])