我正在尝试读取二进制文件,其中包含二进制文件第一行的元素计数。文件的十进制版本是:
131072 32.75988 71.6028 113.0817173 ..... 95.6124
我读取文件的代码是:
char TextName1[] = "BinaryArrayWithLength.bin";
FILE *InFile;
InFile = fopen( "BinaryArrayWithLength.bin", "rb" );
if(InFile == NULL)
{
printf( "Read Error\n" );
return 0;
}
else
{
fread( Length, sizeof(int), 1, InFile);
}
printf("%d\n", *Length);
问题是如果我在Eclipse中编译它,我可以得到正确的长度131072。如果我使用gcc在终端中编译我的代码,我得到的数字是168430090。 我想问题是由不同的编译器引起的。我的gcc版本是4.2.1。我使用的是Indigo for Mac。我的Mac是OSX Lion。
答案 0 :(得分:1)
二进制文件非常特定于平台(与二进制数据一样)。有时它也是特定于编译器的。简单地将原始二进制数据读取为整数不会成为跨平台解决方案。
对于初学者来说,sizeof(int)并不是所有平台都相同的东西。它可能在一个平台上为16位,在另一个平台上为32位,在另一个平台上为64位。只是为了练习,你应该尝试在程序中打印sizeof(int),看看你的本地版本和你的远程gcc构建之间是否有所不同。
你需要处理的第二个问题是字节顺序。 http://en.wikipedia.org/wiki/Endianness
有一些库可以帮助您解决这个问题,但是以跨平台的方式阅读各种二进制数据并不是一件容易的事。