将整数更改为十六进制Ruby

时间:2013-11-28 18:48:44

标签: ruby perl hex pack

我目前正在将一个perl项目移植到ruby,所有这一切都很顺利,直到我收到这个包声明。

$move .= pack('W', int($length));

我理解它正在尝试做什么,但我找不到关于perls pack方法的'W'选项的任何文档。所以找到合适的红宝石替代品有点困难。

这句话的作用是取整数,并将其转换为大端十六进制格式(我相信)。

例如,整数290转换为0x122,然后作为"2201"存储在变量$move

虽然我无法确认,因为我找不到'W'上的文档,尽管根据项目的其余部分正在做什么是有意义的。

有没有人知道红宝石替代方法会做同样的事情?

编辑:根据下面的评论,我找到了一些帮助。

W An unsigned char value (can be greater than 255).

1 个答案:

答案 0 :(得分:2)

自5.10格式引入以来,pack说:

W  An unsigned char value (can be greater than 255).

例如,以下内容是等效的:

  • pack('W', 0x2660)
  • chr(0x2660)
  • "\x{2660}"

对于$i的所有值,length(pack('W', $i))都是一个。


Ruby中字符(字符串元素)的大小是多少?它们是8位像C,还是更大,如Java(16)和Perl(32或64)?

如果它们被限制为8位,则Ruby中没有直接等效的代码。您需要使用数组而不是字符串。

如果Ruby的字符宽度足以包含有问题的数字(例如290),那么浏览Ruby文档会发现以下内容:

i.chr