我目前正在将一个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).
答案 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