本記事では、Juliaでバイナリファイルを読み書きする方法を紹介します。
バイナリファイルとは
コンピューターが処理しやすい形で書かれたデータファイルの事を指します。
二進数で書かれていることが多く、人間の目には何が書いてあるかなかなか理解できません。
バイナリファイルを読む
data = zeros(Float32,(32,32))
open("/home/hogehoge/sample.dat") do file
read!(file,data)
end
1行目で、32×32の32bitの浮動小数点数型で読み込みます。
あくまでも例なので、適時、データサイズ、データタイプは変えてくださいね。
2行目以降で、open関数でバイナリファイルのデータをdata配列に格納しています。
以上、簡単に読み込むことが出来ました。
異なるシステムで生成されたデータを読むとき
システムによっては、データをメモリに格納する方法が違うことがあります。
ビックエンディアンは、4バイトデータを前から順に格納する方法で
リトルエンディアンは、4バイトデータを後ろから順に格納する方法です。
ビックエンディアンデータ
リトルエンディアンで、ビックエンディアンデータを読むには、
先ほどのdata配列に以下のように記述することで可能です。
data .= ntoh.(data)
リトルエンディアンデータ
ビックエンディアンで、リトルエンディアンデータを読むには、
先ほどのdata配列に以下のように記述することで可能です。
data .= ltoh.(data)
バイナリファイルを書く
data = rand(Float32,(32,32))
write("test.bin",data)
1行目で、32×32の32bitの浮動小数点数型の乱数を生成し、
2行目で書き出しています。
異なるエンディアンで書き出す場合
ビックエンディアンデータ
リトルエンディアンでビックエンディアンデータとして書き出すには、
先ほどのdata配列に以下のように記述することで可能です。
data .= hton.(data)
リトルエンディアンデータ
ビックエンディアンでリトルエンディアンデータとして書き出すには、
先ほどのdata配列に以下のように記述することで可能です。
data .= htol.(data)