[Python-Dev] 32-bit values (was RE: [Python-checkins] python/dist/src/Lib/test test_zlib.py,1.18,1.19)
Guido van Rossum
guido@python.org
Mon, 12 Aug 2002 11:54:09 -0400
> This raises a question: what should crc32 and adler32 return? They return
> 32-bit values, and that's part of external definitions so we can't change
> that, but how we *view* "the sign bit" is up to us. binascii.crc32()
> always-- even on 64-bit boxes --returns a value in range(-2**31, 2**31). I
> know that because I forced it to not long ago. I don't know what the other
> guys return (zlib.crc32(), zlib.adler32(), ...?).
>
> It would sure be nice if they returned values in range(0, 2**32) instead. A
> difficulty with changing this stuff is that checksums seem frequently to be
> read and written via the struct module, with format code "l", and e.g.
>
> >>> struct.pack("!l", 1L << 31)
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> OverflowError: long int too large to convert to int
> >>>
Such programs will have to be changed to use format code "L" instead.
Or perhaps "l" should be allowed to accept longs in
range(-2**31, 2**32) ?
--Guido van Rossum (home page: http://www.python.org/~guido/)