Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 将字母数字字符串转换为整数格式_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 将字母数字字符串转换为整数格式

Ruby on rails 3 将字母数字字符串转换为整数格式,ruby-on-rails-3,Ruby On Rails 3,我需要在一个模型的整数列中存储字母数字字符串 我试过: @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 当我在控制台中使用put hex_id而不是create行来运行它时,它返回正确的值,但是上面的代码导致每个实例的or

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

我试过:

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

有谁能告诉我这里出了什么问题,或者提出一种更好的方法来存储字符串,比如前面的例子中的唯一整数


谢谢。

通过请求表OP回答

在这种情况下,
hex_id.join
操作似乎不会连接字符串,而是对十六进制值求和或执行二进制补码。问题还可能是,
hex\u id
是一个十六进制的数组,而不是字符串或字符数组。然而,似乎发生的情况是,整数类型
2147483647
达到最大正值。尽管如此,我还是找不到任何关于
array.join
应用于十六进制数组的文档效果,它似乎不是元素的串联


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

似乎溢出了整数边界。也许您需要一个更大的数据类型,比如64位整数(long)?@IvayloSlavov也许..但这不能解释为什么“t6gnk3pp86gg4sboh5oin5vr40”会变成“2147483647”,而不是像它应该的那样“060003008600401100050040”。
“060003008600401000050040”对于整数来说是一个太大的数字。也许太大了,长时间用不了。如果hex函数只是在整数的二进制表示上设置标志,那么当设置所有标志时,您将获得最大值(有符号类型的最小值)。不过,我希望您能收到
-2147483648
。它显然与二进制表示中的耗尽位置有关result@IvayloSlavov如果你想回答这个问题,我会接受的。我最后做的只是添加一个字符串列,以便在获取id值格式的情况下使用。