from_bytes 与解包计算之间的区别

Difference between calculation of from_bytes vs. unpack

我一直在尝试使用两种方法弄清楚为什么这个字节数组会导致不同的结果:

print(msg[16:20])
>>> b'\xe4\x86\xaaU'
msg[16:20].hex()
>>> e486aa55
print(int.from_bytes(msg[16:20], byteorder='big', signed='False'))
>>> -460936619
print(unpack_from('!I', msg, offset=16)[0])
>>> 3834030677
print(unpack('!I', msg[16:20])[0])
>>> 3834030677

使用内置 from_bytes() 函数怎么会计算出错误的结果?我自己重新计算了它 (),结果应该与使用 unpack()

的结果类似
228*256^3+134*256^2+170*256^1+85+256^0 = 3834030677

希望在你们的帮助下找到我的错误/错误想法 - 非常感谢!

使用 signed = False 而不是 signed = 'False'

'False' 是一个字符串,因为它是非空的,所以它被视为真值。因此,数字被签名。

k = b'\xe4\x86\xaaU'

# UNSIGNED
print(int.from_bytes(k, byteorder = 'big', signed = False))

# SIGNED
print(int.from_bytes(k, byteorder = 'big', signed = True))
print(int.from_bytes(k, byteorder = 'big', signed = 'False'))

Try it online!