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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Gammodler
記事: 2
登録日時: 12年前

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

#1

投稿記事 by Gammodler » 10年前

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以外はないそうですが、回避策があればお教えください。

Poco
記事: 161
登録日時: 13年前

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

#2

投稿記事 by Poco » 10年前

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

Gammodler
記事: 2
登録日時: 12年前

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

#3

投稿記事 by Gammodler » 10年前

Poco様
ご指摘の通りでした。
FTP送信用textファイルに"binary"の指定が抜けていました。
つまらないことを伺ってしまいました。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る