3

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?

4

2 回答 2

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(),并返回长度(以字节为单位)。零在这种情况下起作用,因为它们可以转换为每种数字格式(整数、双精度、浮点等)。

于 2011-12-08T21:30:35.380 回答
0

我不知道捷径,但您可以打包一个并询问它有多长:

length_of_five_packed_doubles = 5 * [1.0].pack('d').length

顺便说一句,结合pack方法的 ruby​​ 数组在功能上似乎等同于 python 的 struct 模块。Ruby 几乎复制了 perlpack并将它们作为Array类的方法。

于 2010-12-20T01:07:03.287 回答