from_bytes的计算与unpack的计算之间的差异



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

print(msg[16:20])
>>> b'xe4x86xaaU'
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()函数是如何计算错误的结果的?我自己重新计算过了(https://stackoverflow.com/a/50509434)并且结果应该与使用CCD_ 2 的结果相似

228*256^3+134*256^2+170*256^1+85+256^0 = 3834030677

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

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

'False'是一个字符串,由于它不是空的,所以它被视为一个truthy值。因此,数字会被签名。

k = b'xe4x86xaaU'
# 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'))

在线试用!

最新更新