3

たとえば の場合ddddddはシステムのネイティブ フォーマットなので、サイズがどのくらいになるか正確にはわかりません。

Pythonで私ができること:

import struct
print struct.calcsize('ddddd')

どちらが返され40ます。

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() を呼び出し、長さ (バイト単位) を返します。この場合、ゼロは各数値形式 (integer、double、float など) に変換できるため、機能します。

于 2011-12-08T21:30:35.380 に答える
0

ショートカットについてはわかりませんが、1 つパックしてどれくらいの長さかを尋ねることができます。

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

ちなみに ruby​​ の配列とpackメソッドを組み合わせたものは、機能的には python の struct モジュールと同等のようです。Ruby は perl のものをほとんどコピーし、それらをクラスpackのメソッドとして配置しました。Array

于 2010-12-20T01:07:03.287 に答える