In the case of e.g. ddddd
, d
is the native format for the system, so I can't know exactly how big it will be.
In python I can do:
import struct
print struct.calcsize('ddddd')
Which will return 40
.
How do I get this in Ruby?
我还没有找到一种内置的方法来做到这一点,但是当我知道我只处理数字格式时,我已经成功地使用了这个小函数:
def calculate_size(format)
# Only for numeric formats, String formats will raise a TypeError
elements = 0
format.each_char do |c|
if c =~ /\d/
elements += c.to_i - 1
else
elements += 1
end
end
([ 0 ] * elements).pack(format).length
end
这构造了一个适当数量的零数组,使用您的格式调用 pack(),并返回长度(以字节为单位)。零在这种情况下起作用,因为它们可以转换为每种数字格式(整数、双精度、浮点等)。
我不知道捷径,但您可以打包一个并询问它有多长:
length_of_five_packed_doubles = 5 * [1.0].pack('d').length
顺便说一句,结合pack方法的 ruby 数组在功能上似乎等同于 python 的 struct 模块。Ruby 几乎复制了 perlpack
并将它们作为Array
类的方法。