在Ruby中将十六进制作为整数处理

jam*_*246 0 ruby

在Ruby on Rails应用程序中,我们有一些存储为整数的细节,但在我们尝试转换为字符串时被解释为十六进制.

例如

> 0123.to_s
=> 83
Run Code Online (Sandbox Code Playgroud)

有没有办法将值视为整数,即使它是Ruby看到的十六进制格式.如果没有,我们只需将数据库字段更改为varchar!

Phr*_*ogz 7

实际上,这不是十六进制,那是八进制.如果您不想要此行为,请不要在代码中的整数文字上放置前导零:

irb(main):001:0> 0123         # octal literal
#=> 83

irb(main):002:0> 0x123        # hex literal
#=> 291

irb(main):003:0> 123          # base-10 literal
#=> 123

irb(main):004:0> "0123".to_i  # Converting string to int defaults to base 10
#=> 123
Run Code Online (Sandbox Code Playgroud)

如果因为你使用Ruby使用printf创建对齐的Ruby代码而出现前导零,如下所示:

irb(main):008:0> "%04i" % 123
#=> "0123"
Run Code Online (Sandbox Code Playgroud)

...然后使用空格填充而不是零:

irb(main):009:0> "%4i" % 123
#=> "  123"
Run Code Online (Sandbox Code Playgroud)

  • @omhouse我不知道这意味着什么或它与你的问题有什么关系,但听起来你已经解决了你的问题.如果是这样,我很高兴你. (3认同)