Я хочу читать, например. между 11-м и 23-м числами в шестнадцатеричном .bin-файле , выглядящем так: https://imgur.com/b4RzPjw, печатать некоторые части как intiger или другие части как имя (строку) . (желательно без использования [ ]
, только операции с указателями)
Мой пример .bin-файла содержит: сначала 4 шестнадцатеричных числа (синяя подсветка) - длина имени, затем 2 числа - имя в ASCII. Следующие 4 цифры (синее подчеркивание) - это длина фамилии (красное подчеркивание), а последнее - индекс.
Моя попытка:
После загрузки всего .bin-файла в буфер точно так, как показано здесь: http://www.cplusplus.com/reference/cstdio/fread/, я с треском пытался разными способами присвоить части этого буфера переменным (или структуре), а затем распечатать его, используя форматирование, просто чтобы увидеть что было назначено.
char *name_length = malloc(4);
char *pEnd;
for(*buffer=0; *buffer<4; *buffer++) {
sscanf(buffer, "%s", name_length);
long int i = strtol (buffer, &pEnd, 16);
printf("%x", i);
}
Над (неправильным) кодом печатается 0000 (я думаю, он полностью прогнил от своих корней, хотя я не знаю, почему); в случае, если был элегантный способ загрузить части буфера уже в структуру, вот объявление:
struct student_t
{
char name[20];
char surname[40];
int index;
};
«Ближайший» результат, который я смог получить, - это другой код, который печатает «2000». из моего .bin файла: «02 00 00 46 2E
», что означает «2
0 0 0 / длина / F.
/ строка /»
for(int i=0; i<4; i++)
printf("%d", buffer[i]); //it's supposed to print first 4 hex digits...
for(int j=5; j<7; j++)
printf("%s", &buffer[j]); //it's supposed to print from 5th to 7th...
Большое спасибо за помощь и руководство.