float f = (float)30.711933; int len = fwrite(&f,sizeof(float),1,fp);  // 写层的数量

本打算,往文件里写4个字节,因为float是4个自己的。
但实际调试发现是以上代码实际写了5个字节到文件里,
为什么?
怎么才能只让写4个字节呢?

解决方案 »

  1.   

    你怎么判断它写了5个字节?你看的是文件的字节数吗?如果是,应该是文件有一个标志位占用了一个字节吧
    int len = fwrite(&f,sizeof(float),1,fp);  
    len表示写入的字节,这里肯定会是4
    你调试的时候len是5而不是4?
      

  2.   

    你文件的打开方式可能有问题
    fopen(..,"wb");
      

  3.   

    FILE *fp;
    fp = fopen("c:\\test.bin","wt");
    if(!fp) return; float f = (float)30.711933;
    int len = fwrite(&f,sizeof(float),1,fp);  // 写层的数量
    long l = ftell(fp);
    fclose(fp);
    以上代码运行结果为:
    len = 1, l = 5  打开"c:\test.bin" 内容为5个字节0D 0A B2 F5 51 等5字节。
    此结果预计写4个细节的float 数据不符合。
      

  4.   

    注意: 我修改以上代码中的 (float)30.711933; 为(float)30.707109;
    仅仅数组变化:
    得到了不同的结果:
    FILE *fp;
    fp = fopen("c:\\test.bin","wt");
    if(!fp) return; float f = (float)30.707109;
    int len = fwrite(&f,sizeof(float),1,fp);  // 写层的数量
    long l = ftell(fp);
    fclose(fp);
    结果:len = 1  , l = 4; 打开“c:\test.bin” 内容为29 58 F5 41 等4字节内容。
      

  5.   

    fopen("c:\\test.bin","wt");"wt"->"wb",应该是没问题了。
    另外说实话,我写文件只用过"w"和"wb",前者好像是文本方式,后者是二进制方式,"wt"是个什么东东,完全不知道@_@!