Итак, моя проблема: мне нужно получить некоторые примитивные значения (float) из файла, который я использовал и проанализировал в Java, на мой код C (тестирование между реализацией Java и C). Поэтому в Java я использовал ByteBuffer.allocate()
для получения байтов и Files.write()
, чтобы записать их в файл. Файл выглядит нормально, я проверил его с помощью Hex Editor (реальные значения, а не только ноль). Сейчас в C, для чтения данных я использовал:fread() read zero values
float * floatArray = malloc(numData * sizeof(float)); //numData is int, 1000 for example
FILE * stream = fopen(input, "rb"); //input is the name of my binary file
rewind(stream);
fread(floatArray, numData, sizeof(float), stream);
fclose(stream);
и для теста:
for(i = 0; i < 128; i++) {
printf("%f, ", floatArray[i]);
}
, но единственное, что я вижу, это
0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, + next 114 zeros
Для получения более подробной информации:
Входной файл имеет значение 158 МБ. На самом деле у него много нулей, но, например, первые 3 числа должны быть 9, 52 и 29. Другое дело, что я уже проверил возвращаемое значение fread
и вернул правильное значение (numData). Я проверил другие вопросы на сайте, но я действительно не нашел свою проблему. У других были проблемы, например, они установили индикатор файла с fseek
в конце файла, когда они получили все нули. Я думаю, это не может быть проблемой, связанной с энтерией, потому что я думаю, что получаю плохие значения, а не только нулевые. Я использую Visual C++ 2008 Express в Windows 7.
Извините за мое форматирование и английский, это мой первый вопрос. Я буду благодарен за любую помощь.
Является ли 'floatArray' то же самое в for-loop? – BLUEPIXY
'input - это имя моего двоичного файла'. Вы уверены, что смогли открыть его? Все нули * могут * указать, что файл не читался. Проверьте возвращаемые значения на 'fopen', удалите это' rewind' (вам это не нужно) и проверьте возвращаемое значение 'fread'. – usr2564301
Я просто попробовал 'if (stream == NULL) printf (« Ошибка »);' и не была напечатана ошибка – ZidaneT