Прочитать первое целое число в двоичном файле - PullRequest
0 голосов
/ 17 февраля 2012

Наличие двоичного файла, который содержит:

# hexdump file.pak 
0000000 09 00 00 00 
0000004

Попытка прочитать его с использованием фреда приводит к:

int main(void){
  char *filename = "file";
  FILE *fh = header_open(filename);
  header_init(fh);
  header_read_num_files(fh);
  header_close(fh);
}

FILE *header_open(char *pkg_file){
  FILE *fh;
  // open file with binary/read mode                                                                                                                                               
  if ( (fh = fopen(pkg_file, "ab")) == NULL){
    perror("fopen");
    return NULL; // todo: ...                                                                                                                                                      
  }

  return fh;
}

int header_read_num_files(FILE *fh){
  fseek(fh, 0L, SEEK_SET);
  char c;
  fread(&c, sizeof(char), 1, fh);
  fprintf(stderr,"buff received: %d\n", c);
}

/* write first 0 for number of files */
void header_init(FILE *fh){
  unsigned int x= 9;
  fseek(fh, 0, SEEK_SET);
  fwrite( (const void*)&x, sizeof(int), 1, fh);
}


output: buff received: 112

Моя система использует преобразование с прямым порядком байтов.но все же другие байты установлены в ноль, я не могу понять, почему я получаю этот вывод.

Объяснение очень ценится.

1 Ответ

1 голос
/ 17 февраля 2012

Вы открываете файл с опцией "ab". Но эта опция не позволяет читать из файла, разрешена только запись в его конец. Попробуйте открыть этот путь

fh = fopen(pkg_file, "w+b")
...