c - 读取二进制文件中的第一个整数

标签 c binary integer fread

有一个包含以下内容的二进制文件:

# hexdump file.pak 
0000000 09 00 00 00 
0000004

尝试使用 fread 读取它会导致:

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

我的系统使用小字节序转换。但其他字节仍然设置为零,我真的不明白为什么我会得到这个输出。

非常感谢您的解释。

最佳答案

使用“ab”选项打开文件。但此选项不允许从文件中读取,只允许写入文件末尾。尝试这样打开

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

关于c - 读取二进制文件中的第一个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9319672/

相关文章:

c++ - (int)-2147483648 除以 (int)-1 的结果,使用不同的编译器?

c - 我的代码不适用于较大的 n 值

c - C中的数组问题

c - C 中的共享全局 Typedef 变量重新声明

java - 为什么scanner.hasNextInt()方法需要一个字母来开始处理数字?

python - 在 Python 3.x 中生成位排列的最快方法

java - 精确的二进制求和

c - 理解 c 中的字符串数组

c - 使用 C 的范围内的随机数

javascript - 使用 JS 将二进制数转换为 ASCII 文本时出错