0

我需要在我的一个模型的整数列中存储一个字母数字字符串。

我努力了:

@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代替 create 行运行它时,它会返回正确的值,但是上面的代码导致每个实例的 origin_id 都设置为“2147483647”。一个示例字符串输入是“t6gnk3pp86gg4sboh5oin5vr40”,所以这对我来说没有任何意义。

谁能告诉我这里出了什么问题或建议一种更好的方法来将上述示例中的字符串存储为唯一整数?

谢谢。

4

1 回答 1

0

通过请求表 OP 回答

在这种情况下,该hex_id.join操作似乎没有连接字符串,而是对十六进制值求和或执行二进制补码。问题也可能hex_id是十六进制数组而不是字符串或字符数组。然而,似乎发生的是达到整数类型的最大正值2147483647。尽管如此,我仍然无法找到任何已记录的对array.join应用于十六进制数组的影响,看来它不是元素的串联。

另一方面,期望的结果060003008600401100500050040也太大而不能记录为整数。更好的方法是将其保留为字符串,或使用不同的算法从原始字符串中生成数字。也许通过算术运算聚合十六进制值会比join

于 2013-05-13T21:42:03.180 回答