我正在研究一种应该在几种不同的操作系统和计算机中写入和读取的文件格式。其中一些计算机应该是 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 (这也可能使我的代码更快)吗?