当我用括号包装每个班次时,这个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
Run Code Online (Sandbox Code Playgroud)
从我作为C开发人员的角度来看,考虑到Coef和resp都是无符号整数,这些语句应该是等价的.
我的猜测是,当括号不存在时,Python对var的类型感到困惑.
与类型无关; +优先级高于<<.(这也是C中的情况.)您的表达式被解析为:
((0xFF & resp[0])
<< (24 + (0xFF & resp[1]))
<< (16 + (0xFF & resp[2]))
<< (8 + 0xFF & resp[3]))
Run Code Online (Sandbox Code Playgroud)
此外,如果resp是bytes(它应该是一个很好的机会),你可以:
int.from_bytes(resp[:4], 'big')
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因必须使用Python 2,struct.unpack可以做同样的工作:
Coef, = struct.unpack('>I', resp[:4])
Run Code Online (Sandbox Code Playgroud)