String#pack适用于1.9+,而不是1.8*



我偶然发现了一个我不太理解的错误。

# 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。

Ruby 1.8+中,如果值太大,则打包会失败,但您可以通过仅考虑低位来获得相同的行为,方法是更改:

[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")

相关内容

最新更新