Очень плохо знаком с C / C ++, и я борюсь здесь. У меня есть файл .bin с 32-разрядными знаковыми целыми числами в шестнадцатеричном формате, в который я хочу прочесть. Сначала мне нужно прочитать первые два числа, так как они содержат информацию об остальной части данных, но я даже не могу получить это правильно. Тестовый файл имеет
00000004
00000003
, так как первые два числа, выполняющие мой код, дают мне 808464394 для моей переменной размера данных. Я попытался указать формат printf как% lx, просто на тот случай, если я испорчу форматирование printf.
Я выбрал long int для чтения моих данных, так как я понимаю, что long in имеет 32-битную подпись, так что это будет лучшим выбором. Позже мне, однако, нужно будет разбивать каждое длинное и смотреть на группы битов в длинном.
Может, кто-нибудь посоветует мне, почему распечатанные цифры не те, которые я хочу. Также, если long int не является подходящим типом данных, не могли бы вы предложить альтернативу.
Код прилагается ниже.
Спасибо
int getsizes(long &data_size, long &image_size);
int main()
{
long* data = NULL; // pointer of arry we will read data into.
long data_size, image_size;
// get data_size and image_size from task1.bin
if (getsizes(data_size,image_size)) cerr << "Error getting data_size,image_size" ;
int Idata_size = (int) data_size; // creat my array to store rest of file in
data = new long[Idata_size];
// get rest of data (still to do)
// interprate data operations (still todo).
delete [] data; // freeing memory just for completeness even though program is about to exit.
data = NULL;
return 0;
}
\\functions
int getsizes(long &data_size, long &image_size)
{
FILE *fp;
fp=fopen("test01.bin", "rb"); // open for reading
if (fp==0) cerr << "Error openeing file"<<endl;
fread(&data_size, sizeof(data_size), 1, fp); //sizeof(data_size) should be 32
fread(&image_size, 32, 1, fp);
#ifdef DEBUG
printf ("data_size= %ld \n", data_size);
cout <<"call4" <<endl;
printf ("image_size= %ld \n", image_size);
#endif
fclose(fp); //
return 0; // succsess.
}