我偶然发现了一个我不太明白的错误。
# Ruby 1.8.7
>> [Digest::MD5.hexdigest("http://www.google.com").to_i(16)].pack("N")
RangeError: bignum too big to convert into 'unsigned long'
# Ruby 1.9.3
>> [Digest::MD5.hexdigest("http://www.google.com").to_i(16)].pack("N")
=> "17!@"
任何人都可以解释原因,我该如何解决这个问题?如果不能使用便携式解决方案,我需要一个1.8.7。
答案 0 :(得分:3)
在 Ruby 1.8 + 中,如果值太大,则pack会失败 - 但只需考虑低位,即可通过更改来获得相同的行为:
[Digest::MD5.hexdigest("http://www.google.com").to_i(16)].pack("N")
到
[Digest::MD5.hexdigest("http://www.google.com").to_i(16) % 2**32].pack("N")