Невозможно получить правильное количество элементов при чтении двоичного файла с Fread - PullRequest
0 голосов
/ 06 февраля 2012

Я пытаюсь прочитать двоичный файл с количеством элементов в первой строке двоичного файла.Десятичная версия файла:

    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);

Проблема в том, что я могу получить правильную длину, равную 131072, если я скомпилирую еев затмении.Если я скомпилирую свой код в терминалах с помощью gcc, я получу число 168430090. Я думаю, что проблема вызвана различными компиляторами.Моя версия gcc - 4.2.1. Я использовал затмение Indigo для Mac.Мой Mac - OSX Lion.

1 Ответ

1 голос
/ 06 февраля 2012

Двоичные файлы очень зависят от платформы (как и с двоичными данными в целом).Иногда это также зависит от компилятора.Простое чтение необработанных двоичных данных в целое число не будет кроссплатформенным решением.

Для начала sizeof (int) не является чем-то одинаковым на всех платформах.Это может быть 16 бит на одной платформе, 32 бит на другой и 64 бит на другой.Просто для упражнения, вы должны попытаться распечатать sizeof (int) в вашей программе, чтобы увидеть, отличается ли он между вашей локальной сборкой и вашей удаленной сборкой gcc.

Вторая проблема, с которой вам приходится иметь дело, это endianness.http://en.wikipedia.org/wiki/Endianness

Существуют библиотеки, которые помогут вам в этом, но чтение всех видов двоичных данных кросс-платформенным способом не совсем тривиально.

...