不推荐使用警告:不推荐使用结构整数溢出掩码

2024-10-01 17:21:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下问题。代码看起来像:

import  binascii, struct
def crc32up(data):
    # little endian!!
    bin = struct.pack ('<I', binascii.crc32 (data))
    return string.upper (binascii.hexlify (bin))

# Generate crc of time code.
#
timecrc_code = crc32up(time_code)

警告是:

^{pr2}$

是什么导致了这个错误?在


Tags: 代码importdatareturnbintimedefcode
1条回答
网友
1楼 · 发布于 2024-10-01 17:21:24

您试图压缩到分配给它们的4个字节中的值太大:

>>> import struct
>>> n = 2 ** 32
>>> n
4294967296L
>>> struct.pack('<I', n - 1)
'\xff\xff\xff\xff'
>>> struct.pack('<I', n)
__main__:1: DeprecationWarning: struct integer overflow masking is deprecated
'\x00\x00\x00\x00'

较新的python版本(gt;=2.6)也会对接受的值发出警告:

^{pr2}$

python告诉您的是,它必须屏蔽该值以容纳4个字节;您可以使用value & 0xFFFFFFFF自己来实现这一点。在

在python程序执行期间,只发出一次警告。在

注意,从2.6开始,binascii.crc32值始终是一个4字节的有符号值,您应该始终使用掩码来打包这些值。这在2.6之前并不总是一致的,并且依赖于平台。有关详细信息,请参见the documentation。在

相关问题 更多 >

    热门问题