我需要在我的一个模型上的整数列中存储一个字母数字字符串。
我试过了:
@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”,这对我没有任何意义。
有人能告诉我这里出了什么问题,或者建议一个更好的方法来存储像上述例子一样的字符串作为一个独特的整数吗?
感谢。
答案 0 :(得分:0)
按申请表OP回答
在这种情况下,似乎hex_id.join
操作不会连接字符串,而是对十六进制值进行求和或执行二进制补码。问题还可能是hex_id
是十六进制数组而不是字符串或char数组。然而,似乎发生的是达到整数类型2147483647
的最大正值。尽管如此,我还是无法找到应用于十六进制数组的array.join
的任何记录效果,它似乎不是元素的连接。
另一方面,期望的结果060003008600401100500050040
太大而不能记录为整数。更好的方法是将其保持为字符串,或使用不同的算法从原始字符串生成数字。也许通过算术运算聚合十六进制值会比join
?