【Ruby】ファイルにバイナリデータを書き込む
外部から取得した整数を32ビットのバイナリ形式でファイルに書く、
ということがやりたかったのだが、リファレンスを読んでも
数値から直接バイナリ配列(のString)を得る方法が見つからなかった。
そのため面倒くさいとは思いつつも複数段階を経て変換を行った(<1>)。
<1>
hex_string = sprintf("%#010x", number) #まず16進数の文字列として表す 2.step(hex_string.bytesize - 2, 2) do |index| #文字列の頭の"0x"を無視して binary_array << hex_string[index, 2].hex.chr #2文字ずつ取り出し数値に変換、 end #次に文字列型へ変換
ところが、実はArrayクラスに直接変換するメソッドpackがあることを発見。
packを使うとファイル出力と合わせても3行で終了(<2>)。
<2>
File.open(filename, 'w+b') do |file| #"N"はビッグエンディアンの file.write([number].pack("N")) #32bit符号なし整数を指定する end #テンプレート文字
数値を1つずつ変換することを考えてたので、Arrayが必要になるとは思わなかった・・・。
IntegerとかStringとかのリファレンスをなめるように読んでも見つからないはずだ。