我正在研究应在几个不同的操作系统和计算机上写入和读取的文件格式。其中一些计算机应该是x86机器,其他x86-64。其他一些处理器可能存在,但我不关心它们还有。在C代码中写入和读取long int值
这种文件格式应该包含将被读这样几个数字:
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(这可能会使我的代码更快)吗?
@GMan - 你不^ h同样的问题与工会(除非你有条件地编译基于平台的endianess联盟的不同定义)? – 2009-07-09 19:57:43
对stdint的引用非常有用,它会有很大的帮助! – luiscubal 2009-07-09 21:29:22