首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么adler32(0xFFFFFFFFF,"") = 0xE000E?

为什么adler32(0xFFFFFFFFF,"") = 0xE000E?
EN

Stack Overflow用户
提问于 2012-03-09 12:11:39
回答 1查看 398关注 0票数 0

我注意到当传递空字符串时,zlib的adler32 function并不总是返回原始种子。例如:

代码语言:javascript
复制
adler32(0xFFFFFFFF,          // seed
        (const Bytef *) "",  // buffer
        0                    // length
       )

返回0xE000E。我认为它应该返回0xFFFFFFFF

对于大多数其他值,它确实会返回原始种子。但是,对于1965855个从0到0xFFFFFFFF的数字,当输入字符串为空时,adler32会更改种子。

这是一个bug还是实现的奇怪行为,或者Adler-32函数的范围实际上是0,0xFFFFFFFF的子集?

请注意,当指针为NULL时,adler32始终返回1 (初始种子)。这是documented行为。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-09 12:41:59

第一个参数不是“种子”。它是要追加的前一个adler32值。

可以,adler32的范围不全是32位的值。0xffffffff不是有效的adler32。唯一有效的adler32值是32位值的上半部分和下半部分在解释为整数时都小于65521。当您以零长度调用adler32()时,它将返回以65521为模的上半部分和下半部分。

1965855等于65521*15 + 15*65521 + 15*15,即上半部分有效、下半部分无效的32位数值的个数加上上半部分无效、下半部分无效的32位数值的个数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9628825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档