[英]Unable to get the right count of elements when reading a binary file with fread
我正在尝试使用二进制文件第一行中的元素计数读取二进制文件。 该文件的十进制版本为:
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。我使用的Eclipse是Mac的Indigo。 我的Mac是OSX Lion。
二进制文件是特定于平台的(通常与二进制数据一样)。 有时它也是特定于编译器的。 简单地将原始二进制数据读取为整数将不会成为跨平台的解决方案。
对于初学者来说,sizeof(int)在所有平台上都不会一样。 在一个平台上可能是16位,在另一个平台上可能是32位,而在另一个平台上可能是64位。 仅作练习,您应该尝试在程序中打印出sizeof(int),以查看本地版本和远程gcc版本之间是否存在差异。
您必须处理的第二个问题是字节序。 http://en.wikipedia.org/wiki/Endianness
有一些库可以帮助您解决此问题,但是以跨平台的方式读取各种二进制数据并不是一件容易的事。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.