On Sun, May 25, 2008 at 05:25:04PM +0200, Stefan Alfredsson wrote:
> Stefan Alfredsson wrote:
> >> return struct.pack('>i',self.value)
> >
> > This assumes that self.value should be signed. A problem might arise if it
> > should really be unsigned.
> >
> > self.value is assigned from _crc32, which calls zlib.crc32.
> > According to pydoc, "The returned checksum is an integer."
> > According to intuition, a checksum should not be negative (?).
> >
> > I'll have to look closer at this.
>
> Interesting indeed. According to http://bugs.python.org/issue1202,
>
> "The functions zlib.crc32() and zlib.adler32() return a signed value
> in the range(-2147483648, 2147483648) on 32-bit platforms, but an
> unsigned value in the range(0, 4294967296) on 64-bit platforms. This
> means that half the possible answers are numerically different on these
> two kinds of platforms."
>
> This was later fixed, such that
>
> 3.0 always returns unsigned.
> 2.6 always returns signed, 2**31...2**31-1 come back as negative integers.
>
> and they note in http://svn.python.org/view?rev=61459&view=rev
>
> "zlib.crc32 and zlib.adler32 now return an unsigned value as any sane person
> would expect. Fixes issues1202."
>
>
> So it seems that the long-term solution is to have an unsigned value, but
> in current versions it might be either signed or unsigned, depending on 32
> or 64 bit archs. Argh!
>
> One solution suggested was to use
>
> x = zlib.adler32(mystr) & 0xffffffffL
>
> which would force it to be unsigned, and thus work with capital I.
>
> Matthew/Upstream, do you have an opionion in this matter?
>
> Regards,
> Stefan
Hey, sorry for not replying earlier. "& 0xffffffff" is the solution I
went with. Actually this has been in svn for almost a year but I never
did a release. arg. Must make some time to do that soon...
--
Matthew Mueller
[EMAIL PROTECTED]
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]