例如ddddd
,d
是系统的原生格式,所以我无法准确知道它有多大。
在python中,我可以这样做:
import struct
print struct.calcsize('ddddd')
将返回40
。
我如何在Ruby中获得这个?
答案 0 :(得分:2)
我还没有找到内置的方法来做到这一点,但是当我知道我只处理数字格式时,我已经成功使用了这个小函数:
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(),并返回长度(以字节为单位)。零在这种情况下工作,因为它们可以转换为每种数字格式(整数,双精度,浮点数等)。
答案 1 :(得分:0)
我不知道捷径,但你可以打包一个并询问它有多长:
length_of_five_packed_doubles = 5 * [1.0].pack('d').length
顺便说一下,结合了pack方法的ruby数组似乎在功能上等同于python的struct模块。 Ruby几乎复制了perl的pack
并将它们作为方法放在Array
类上。