[求助]如何用fwrite写二进制文件?
目前只知道:ofstream bun("test.bun", ios::binary);
char orz[] = "ZZZZZ";
bun.write(orz, sizeof(orz));
bun.close();
这样可以制作出一个.bun文件,但是打开来看,居然是看得见内容的-.-|||,按道理二进制文件应该是乱码才对吧……?还有就是怎么样记录除了char以外类型的资料呢?如果要用fwrite写又是怎么样的呢? 其實用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;
}
这么麻烦,偶觉得直接用fwrite写非常简单的……
2005稍微BT了点:
FILE* fp;
errno_t err;
err = _tfopen_s( &fp, TEXT("filename.bin"), TEXT("wb") );
if ( err ) return -1; // failed
fwrite( buffer, sizeof(char), charlength, fp);
fclose( fp );
以上…… 因為某習慣使用stream(給打飛)
ofstream fnt;
fnt.open("rockfont-8.fnt",ios::out|ios::binary);
unsigned int firstchar = 249;
fnt.read((char*)&firstchar,sizeof(unsigned int));
fnt.close
其實跟LS的不差很遠(內部當然差得遠)
页:
[1]