たとえば の場合ddddd
、d
はシステムのネイティブ フォーマットなので、サイズがどのくらいになるか正確にはわかりません。
Pythonで私ができること:
import struct
print struct.calcsize('ddddd')
どちらが返され40
ます。
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() を呼び出し、長さ (バイト単位) を返します。この場合、ゼロは各数値形式 (integer、double、float など) に変換できるため、機能します。
ショートカットについてはわかりませんが、1 つパックしてどれくらいの長さかを尋ねることができます。
length_of_five_packed_doubles = 5 * [1.0].pack('d').length
ちなみに ruby の配列とpackメソッドを組み合わせたものは、機能的には python の struct モジュールと同等のようです。Ruby は perl のものをほとんどコピーし、それらをクラスpack
のメソッドとして配置しました。Array