我需要在我的某个模型的整数列中存储字母数字字符串。将字母数字字符串转换为整数格式
我曾尝试:
@result.each do |i|
hex_id = []
i["id"].split(//).each{|c| hex_id.push(c.hex)}
hex_id = hex_id.join
...
Model.create(:origin_id => hex_id)
...
end
当我在地方建立线的使用puts hex_id
控制台运行它,它返回正确的价值观,但在origin_id上面的代码结果被设置为“2147483647 “对于每一个实例。一个示例字符串输入是“t6gnk3pp86gg4sboh5oin5vr40”,所以对我来说没有任何意义。
任何人都可以告诉我这里出了什么问题,或者建议一个更好的方法来存储像上述示例一样的字符串作为唯一的整数吗?
谢谢。
看来你溢出整数边界。也许你需要更大的数据类型,比如64位整数(long)? – 2013-05-13 19:38:26
@IvayloSlavov也许......但这并不能解释为什么“t6gnk3pp86gg4sboh5oin5vr40”变成了“2147483647”而不是“060003008600401100500050040”。 – aperture 2013-05-13 19:41:50
'“060003008600401100500050040”'是一个数字太大的整数。可能长时间太长。如果十六进制函数只是在整数的二进制表示上设置标志,那么当所有标志都被设置时,你会得到最大值(对于有符号类型的最小值)。但我希望你能收到'-2147483648'。它肯定似乎与结果 – 2013-05-13 19:46:00