杀鸡四天王 发表于 2007-8-14 16:38:07

[求助]如何用fwrite写二进制文件?

目前只知道:
    ofstream bun("test.bun", ios::binary);
      char orz[] = "ZZZZZ";
      bun.write(orz, sizeof(orz));
      bun.close();
这样可以制作出一个.bun文件,但是打开来看,居然是看得见内容的-.-|||,按道理二进制文件应该是乱码才对吧……?还有就是怎么样记录除了char以外类型的资料呢?如果要用fwrite写又是怎么样的呢?

coolpay64 发表于 2007-8-14 17:42:38

其實用binary mode寫入字串是沒有意義的
Z的二進制碼便是ASCII Code代表Z的代碼,在wordpad開啟,wordpad把ASCII Code顯示成'Z'也是十分正常的事

某把先前作實驗用的源碼貼上來
實驗中使用了讀的程式
只要改成write便沒有問題
其中最重要的一項便是指標的轉換,重點所在


#include <iostream>
#include <fstream>
using namespace std;
int main(){
       ifstream fnt;
      fnt.open("rockfont-8.fnt",ios::in|ios::binary);
      char a0;
      unsigned short maxwidth;
      unsigned short height;
      unsigned short ascent;
      unsigned short pad;
      unsigned int firstchar;
      unsigned int defaultchar;
      unsigned int size;
      unsigned int nbit;
      unsigned int noffset;
      unsigned int nwidth;
   fnt.read(a0,4);
      fnt.read((char*)&maxwidth,2);
      fnt.read((char*)&height,2);
      fnt.read((char*)&ascent,2);
      fnt.read((char*)&pad,2);
      fnt.read((char*)&firstchar,4);
      fnt.read((char*)&defaultchar,4);
      fnt.read((char*)&size,4);
      fnt.read((char*)&nbit,4);
      fnt.read((char*)&noffset,4);
      fnt.read((char*)&nwidth,4);
      cout << "Max Width:" << maxwidth <<endl
      << "Height:" << height <<endl
      << "Ascent:" << ascent << endl
      << "First Char:"<< firstchar << ":" << (char) firstchar<<endl
      << "Default Char:"<< defaultchar << ":" << (char) defaultchar<<endl
      << "Size:" << size << endl
      << "Nbit:" << nbit << endl
      << "Noffset:" << noffset << endl
      << "Nwidth:" << nwidth << endl;
      return 0;

}


lw 发表于 2007-8-17 20:30:16

这么麻烦,偶觉得直接用fwrite写非常简单的……
2005稍微BT了点:
FILE* fp;
errno_t err;
err = _tfopen_s( &fp, TEXT(&quot;filename.bin&quot;), TEXT(&quot;wb&quot;) );
if ( err ) return -1; // failed
fwrite( buffer, sizeof(char), charlength, fp);
fclose( fp );

以上……

coolpay64 发表于 2007-8-18 14:32:42

因為某習慣使用stream(給打飛)
ofstream fnt;
      fnt.open(&quot;rockfont-8.fnt&quot;,ios::out|ios::binary);
      unsigned int firstchar = 249;
      fnt.read((char*)&firstchar,sizeof(unsigned int));
      fnt.close
其實跟LS的不差很遠(內部當然差得遠)
页: [1]
查看完整版本: [求助]如何用fwrite写二进制文件?