同じデータファイルなのに、linuxとMacで値が違ってしまうのはなぜ?
職場でlinux(初心者です), 自宅でMacを使っています。
同じCプログラムを使って、同じバイナリデータファイルから数値を読み出したところ、職場のlinuxでやった場合と自宅のMacでやった場合では、違う値が出てきてしまいます。読み込むデータは1byteのバイナリなので、エンディアンは関係ないと思うのですが、ほかに原因があるのでしょうか?そばに詳しい人がおらず、困っています。どうしてこういうことが起きるのか、また、どうやったら解決できるのか、どなたか詳しい方、ぜひアドバイスをお願いします。
以下、プログラムの説明とプログラムの一部です。
バイナリデータファイルから、dposition[i]番目の1byteのデータをそれぞれ読み込み、それぞれ別の出力ファイルfo[i]に書き込みます。dposition[i]はPOSITION_NUM個あり、従って、出力ファイルもPOSITION_NUM個用意しています。dposition[i]で指定した場所はとびとびの不連続な場所です。データを読み込むときは、0番目から、一番大きいdposition[i]番目(=maxnum番目)のデータまで、すべてをarray[datanum]に読み込み、書き出すときにdposition[i]番目のデータのみを書き出すよう指定しています。読み込むバイナリファイルはFILE_NUM個あり、すべて同じ形式です。順次開いて読み込み出力を繰り返します。以下プログラムの一部です。
for (j = 0; j < FILE_NUM; j++)
{
if(NULL == (fi = fopen(fn_in[j],"rb")))
{
printf("Cannot open input BISE File\n");
exit(1);
}
for (datanum = 0; datanum < maxnum+1; datanum++)
{
array[datanum] = fgetc(fi);
}
for (i = 0; i < POSITION_NUM; i++)
{
fprintf(fo[i],"%d\n",array[dposition[i]]);
}
fclose (fi);
}
以下、linuxでやった場合の出力を左、Maxでやった場合の出力を右に並べて書きます。
104 104
100 100
74 22
83 83
60 60
0 0
106 106
79 33
167 167
182 182
180 0
188 188
... ...
3,8,11番目が違う数字が出力されます。繰り返しますが、プログラムと入力ファイルは同じものです。
linuxでもMacでもターミナルでコンパイル、実行しています。
コンパイラのバージョンは、gccで検索したらなんだかたくさん出てきてしまって、どれが使っているコンパイラのバージョンなのかよくわかりませんでした。
ちなみに、MacはIntel系の方です。
ほか、アドバイスいただくにあたって、何か必要な情報があればご指摘ください。
ぜひよろしくおねがいします。