将int保存到c中的二进制文件

时间:2016-06-07 19:13:43

标签: c file binary

我正在为我的编程课做一个简单的游戏。而且我将播放保存为二进制文件时遇到问题,它只写入坐标字母。

int number只是一个从6到8的数字。 char letter只是A到J的一个字母。

我希望坐标显示在文件上,如A1 ...

有人知道如何解决这个问题吗?

这是功能:

void makeLoad(FILE *f,char letter, int number){
    f = fopen("save.dat", "a+");
    if( f==NULL ) {
      printf("Erro no acesso ao ficheiro\n");
      return ; }
      printf("%c\n", letter );//debug purposes 
      printf("%d\n", number );//debug purposes 

    fwrite(&letter,sizeof(letter),1,f);
    fwrite(&number,sizeof(number),1,f);

    fclose(f);
  }

我期待最后有一系列像A1B3C5这样的戏剧 但是我只得到ABC ......数字之间缺少

如果需要,这是完整的文件:http://pastebin.com/WzynZuaC

1 个答案:

答案 0 :(得分:0)

只要数字只有一个数字,这里就可以快速修复它:

char c = '0' + number;
fwrite(&c,sizeof(c),1,f);

您正在做的是将int的二进制表示写入文件,这与ASCII表示不同。例如,字符'6'的二进制表示为00110110,而int 6的二进制表示为00000000000000000000000000000110。当您要编写前者时,您将后者写入文件。将“0”添加到数字会添加00110000,这会在隐式强制转换为字符后提供正确的二进制值。

修复代码的更简洁方法是使用单个fprintf调用替换fwrite调用,这样可以完成所有工作:

fprintf(f, "%c%d", letter, number);