ページ 11

Linux上で作成したBinaryファイルにゴミ?混入

Posted: 2013年12月07日(土) 21:25
by Gammodler
Linux上で作成したBinaryファイルをWindowsマシンにFTP転送すると、余計なコードが混入します。
Linux上でTextファイルにして転送すればこのような問題は生じませんが、実行時間の関係からBinaryにせざるを得ません。
異なるCPU同士でBinaryファイルのやり取りをすると1:1にはならないという記述をネット上で見たことがあります。
LinuxマシンのCPUはPowerpc、OSはDebian Tinyセットです。

コード:

long data[3];
int i = 0;

if ((fp = fopen("/var/tmp/file.bin", "wb")) == NULL){
printf("file.bin Open Error);
exit(0);
}

while(1){
data[0] = i;
data[1] = 0x123;
data[2] = 0xabc;
i++;
fwrite(data, sizeof(long), 3, fp);
}

以上で作成されたfile.binをWindowsに転送、Binaryエディタによりチェックするとi=10のところで"0d"=Cr?が混入します。
どうも10が区切りになっているようでもあるのですが定かではありません。それから00 0dというコードもある?ようです。

Binaryファイルの書込みはfwrite以外はないそうですが、回避策があればお教えください。

Re: Linux上で作成したBinaryファイルにゴミ?混入

Posted: 2013年12月07日(土) 22:07
by Poco
FTP転送の際にバイナリーモードで転送していますか?
テキストモード(アスキーモードだっけ?)で転送すると、改行コードを自動変換しようとします。
Linux→WindowsではLF(0x0a)→CR(0x0d)+LF(0x0a)という自動変換となります。
なのでi=10(0x0a)が0x0d0aになっているんじゃないのでしょうか?

Re: Linux上で作成したBinaryファイルにゴミ?混入

Posted: 2013年12月08日(日) 00:24
by Gammodler
Poco様
ご指摘の通りでした。
FTP送信用textファイルに"binary"の指定が抜けていました。
つまらないことを伺ってしまいました。ありがとうございました。