私は、いくつかの異なるオペレーティング システムとコンピューターで読み書きできるファイル形式に取り組んでいます。これらのコンピューターの一部は x86 マシンである必要があり、その他は x86-64 マシンである必要があります。他にもいくつかのプロセッサが存在する可能性がありますが、私はまだ気にしていません。
このファイル形式には、次のように読み取られるいくつかの数字が含まれている必要があります。
struct LongAsChars{
char c1, c2, c3, c4;
};
long readLong(FILE* file){
int b1 = fgetc(file);
int b2 = fgetc(file);
int b3 = fgetc(file);
int b4 = fgetc(file);
if(b1<0||b2<0||b3<0||b4<0){
//throwError
}
LongAsChars lng;
lng.c1 = (char) b1;
lng.c2 = (char) b2;
lng.c3 = (char) b3;
lng.c4 = (char) b4;
long* value = (long*) &lng;
return *value;
}
そして次のように書かれています:
void writeLong(long x, FILE* f){
long* xptr = &x;
LongAsChars* lng = (LongAsChars*) xptr;
fputc(lng->c1, f);
fputc(lng->c2, f);
fputc(lng->c3, f);
fputc(lng->c4, f);
}
これは私のコンピューターでは機能しているように見えますが、他のコンピューターでは機能しないか、コンピューター間でファイル形式が異なる可能性があることを懸念しています (たとえば、32 ビットと 64 ビットのコンピューター)。私は何か間違ったことをしていますか?数値ごとに一定のバイト数を使用するには、コードをどのように実装すればよいですか?
代わりに fread (コードも高速になる可能性があります) を使用する必要がありますか?