バイナリデータの書込みについて
こんにちは、初めまして。
さっそくなんですが、バイナリデータの操作を行っていて、ちょっと気になることがあり、質問させて頂きます。
現在あるバイナリデータファイルの読出しには成功し、一応思った通りに書込み、
そのデータは壊れず、読み出せたんですが・・・。
そのバイナリデータファイルは当然のように、アスキー型や文字型、ビッグエンディアンのshortやlongがバイト長ごとに入り混じってます。
アスキー型や文字型は問題なく読み書きできるんですが、
ビッグエンディアンのshortやlongを書き込む時、バイト長を指定してやると、データが壊れてしまいます。
例えば、2バイトのビッグエンディアンのshortを読み出して、そのままリスト値に変換をかけ、なにも加工することなく、再びバイナリ構造体に変換しても、データが壊れてしまいます。
例 失敗) INは読み出すファイル、OUTは書き込むファイル
read (IN,$dataB,2);
$dataA = unpack("n2",$dataB);
$dataB2 = pack("n2",$dataA);
print OUT $dataB2;
現在、packするときに、データ長をしてせず、*とすることでデータの書込みには成功してる(ちゃんと読めるデータとして)んですが、これから先、こういったデータを加工して書き込む場合、データ長を指定せずに書き込むというのは・・・。ちょっと嫌な感じです。
例 成功) INは読み出すファイル、OUTは書き込むファイル
read (IN,$dataB,2);
$dataA = unpack("n2",$dataB);
$dataB2 = pack("n*",$dataA);
print OUT $dataB2;
何が原因なのか、わからず困っています。
なにぶん素人なもので、やってること自体間違っているのかもしれませんが、どなたか御回答頂ければ幸いです。
ここに書いている質問の意図がわからない等、ありましたらその旨お答え頂ければ、私の知る限りお答えしようと思いますので、どうか宜しくお願い致します。
お礼
ご回答ありがとうございます。 multipart/form-dataについて、調べてみます。 お手数をおかけしました。