Считывание из структуры файла выдает неправильное значение - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет.Такая проблема.У меня задача считать и вывести значение из файла(бинарного) с известной структурой значения полей.Описал первый пакет,вывожу в консоль и для заголовка,значение которого по описанию:0xFACE получаю значение:6356468,что в шестнадцатиричной=60FDF4.При сборке получаю предупреждение-: format '%u' expects argument of type 'unsigned int', but argument 2 has type 'short unsigned int.Код прилагаю.В чем может быть проблема?Спасибо.
#include 
 
struct pole0
{
    unsigned short int a1;
    short int a2;
    long int a3;
    long int a4[16];
    float a5;
    float a6;
    float a7;
    float a8;
    float a9;
    float a10;
    float a11;
    float a12;
    float a13;
    float a14;
    float a15;
    float a16;
    float a17;
    float a18;
    float a19;
    float a20;
    float a21;
    float a22;
    long int a23;
    float a24;
    float a25;
    float a26;
    float a27;
    float a28;
    float a29;
    float a30;
    float a31;
    unsigned short int a32;

};

int main()
{
   struct pole0 a;
FILE *f=fopen("E:/qt/projects/ispytaenie/20110601_31N016_An2_Chernoe.cn3","rb");
fread(&a,sizeof(a),1,f);
printf ("%uh",&a.a1);

    return 0;
}

Решение задачи: «Считывание из структуры файла выдает неправильное значение»

textual
Листинг программы
unsigned char buf[sizeof(a)];
fread(&buf, 1, sizeof(buf), f);
for(int i = 0; i < sizeof(a); i++)
     printf("%x", buf[i]);

Объяснение кода листинга программы

  1. В этом коде используется массив типа unsigned char с именем buf, который имеет размер, достаточный для хранения структуры a.
  2. Функция fread используется для чтения данных из файла в массив buf. В качестве аргументов функции передаются адрес массива buf, размер одного элемента (в данном случае 1), и размер массива buf (который должен быть равен размеру структуры a).
  3. Затем происходит проход по всем элементам массива buf с помощью цикла for.
  4. Внутри цикла каждый элемент массива buf выводится на экран с помощью функции printf. Формат вывода задается как %x, что означает вывести шестнадцатеричное значение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5
Похожие ответы