Код =>
#include<stdio.h>
typedef struct {
unsigned short c2;
unsigned long c4;
} TAKECH;
int main() {
TAKECH tch;
FILE *fp_in;
fp_in = fopen("in.txt","rb");
fread(&tch,6,1,fp_in);
printf("First two bytes: %x\n",tch.c2);
printf("Next four bytes: %x\n",tch.c4);
fclose(fp_in);
return 0;
}
Выход =>
First two bytes: 6261
Next four bytes: bfd56665
in.txt =>
abcdef
Hexeditor (редактор vim:%!xxd) показать это =>
0000000: 6162 6364 6566 0a abcdef.
Требуется объяснение вывода:
First two bytes: 6261
‹-- Почему в обратном порядке?
First two bytes: 6162
‹-- Разве это не должно быть?
Почему я не могу получить 6364
на выходе? Как я могу получить следующие четыре байта (6364 6566) с printf("Next four bytes: %x\n",tch.c4);
Почему я получаю Next four bytes: bfd56665
, откуда bfd5
?
Любой ответ будет высоко оценен.
Заранее спасибо.
fread(&tch,6,1,fp_in);
? Честно говоря, самый простой ответ заключается в том, что делать это на самом деле не имеет особого смысла. - person David Schwartz   schedule 23.05.2016char buf[6];
, прочитайте в него файл, а затем поместите каждый байт точно туда, куда вы хотите, напримерtch.c2=buf[0]; tch.c2<<=8; tch.c2|=buf[1];
или куда угодно. Вы не можете случайным образом указывать указатели и ожидать разумных результатов, вы должны кодировать то, что вы действительно хотите. (Кроме того, вы задали неправильный вопрос. Укажите, что вы хотите сделать, и попросите, как это сделать. Не просите помощи в решении проблемы таким образом, который изначально не имеет смысла!) - person David Schwartz   schedule 23.05.2016