繁体   English   中英

使用fread读取二进制文件时无法获得正确的元素计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM