Re: Как считать данные из бинарника в С?

CRIS

Бинарник следующего вида
32bit___32bit___3*A*32bit__4*B*32bit - размеры блоков в порядке их раположения в файле
=int A__=int B___=float* x ___=int* y - переменные в которые нучно записать содержимое блоков
То есть в первых 32 битах записано число А, в следующих число В, затем в 4*А*32 бита записан массив x, затем массив у
Подскажите плз, как проще всего считать эти данные используя только язык С?

maggi14

fread

CRIS

А можешь написать пример как сначала записать инт в бинарник, а потом его считать(для чайника или сказать поччему мой вариант не работает:
int vCnt=3;
FILE *data;
int vCnt1,tstvCnt;
data=fopen( "data.dat", "w" );
fwrite(vCnt, sizeof(int1, data);
//printf( "Wrote %d items\n", numwritten );
fclose(data);
data= fopen( "data.dat", "r" );
tstvCnt = fread( vCnt1, sizeof(int1,data);
fclose(data);
Ругается:
error C2664: 'fwrite' : cannot convert parameter 1 from 'int' to 'const void *'
error C2664: 'fread' : cannot convert parameter 1 from 'int' to 'void *'
Почему vCnt она конвертирует в войд сли я записываю как инт?

maggi14

потому что надо не
fwrite(vCnt, sizeof(int1, data);
а
fwrite(&vCnt, sizeof(int1, data);
> Почему vCnt она конвертирует в войд
во-первых, не в войд, а в войд-звезду.
во-вторых, судя по ошибкам компилятора, она не конвертирует в войд-звезду (хотя могла бы). и правильно делает
> сли я записываю как инт
ты нигде этого не указываешь. Сигнатуры функций fread и fwrite работают с адресом, а не с переменной (что вполне естественно)

CRIS

Спасибо, заработало

Missi4ka

Попробуй в стиле С++

#include <fstream>
using namespace std;
...
int v_source;
int v_dest;
...
fstream file("filename");
file << v_source;
file >> v_dest;
...
file.close;
...

evgen5555

А ты сам пробовал?

Werdna

очевидно что он не пробовал...

Missi4ka

а в чём, собсно, прекол-то? (пробовал давно, сейчас пробовать не хочу — к консоли не отсылайте)

maggi14

>> и << засовывают циферки, а не числа (в текстовом, а не в бинарном виде)

Missi4ka

да, точно. сорри, ступил.
Оставить комментарий
Имя или ник:
Комментарий: