二进制文件的读写以及相关心得.docx
《二进制文件的读写以及相关心得.docx》由会员分享,可在线阅读,更多相关《二进制文件的读写以及相关心得.docx(5页珍藏版)》请在装配图网上搜索。
二进制文件读写分析有关TXT文件以及bin文件处理的测试代码int main() /fstream file(D:test.dat,ios_base:in|ios_base:out|ios_base:app); fstream file; file.open(D:test1.dat,ios_base:out); int temp10 = 0x11,0x13,0x14,0x1F,0x1D,0x11,0x11,0x12,0x11,0x11; int temp110; file.write(char *)temp,sizeof(temp); file.close(); file.open(D:test1.dat,ios_base:in); file.read(char *)temp,sizeof(temp); unsigned int i; coutsizeof(temp)endl; for(i = 0;i sizeof(temp)/sizeof(unsigned int);i+) temp1i = tempi; couttempiprojectId = U; test1-password = 0x12; for(int i = 0;i someThingsi = tempi; test1-sm = (unsigned long)0x41; test1- = M; file.write(char *)test1,sizeof(test); file.close(); test *test2 = (test *)malloc(sizeof(test); file.open(D:test1.dat,ios_base:in); file.seekg(0x28); file.read(char *)test2,sizeof(test); for(int i = 0;i 10;i +) coutsomeThingsiendl; file.close(); return 0;有关bin文件处理的测试笔记 我一直以为自己很熟悉如何使用C/C+中的二进制文件,可今天测试的时候突然发现程序生成的二进制文件和文本文件一样。比如:FILE* fp = fopen(binary,wb);/FILE* fp = fopen(character.txt,w);fprintf(fp,count is %d,250);上述代码一个使用的是text file mode,一个是binary file mode,但结果生成的二进制文件中保存的仍然是ASCII 码,直接用记事本就可以打开查看。要说区别,主要是换行符的区别,binary file 的换行符为,而text file 的换行符为,仅此而已,我就想怎么回事啊,我明明是用二进制模式打开的文件呀,怎么里面直接保存的还是ASCII 码?也就是说保存125 这个数字还是会占用3 个字节,而不是我想象中那样只占一个字节!后来我就换用C+,结果还是一样,代码如下:ofstream fs(binary,ios:binary);/ofstream fs(character.txt);int i = 32765;fsiendl;/fs.write(char*)&i,2);fs.close();无论以二进制文件模式打开还是以文本模式打开,文件中都是保存着文本!似乎C/C+中的binary 模式不起作用!?!后来查阅资料才知道:要想在C/C+中将数据以二进制形式文件输出,与你打开文件时的模式没有关系,关键是取决于你调用哪个函数往文件里写东西!只有使用fwrite 和fs.write()函数才能以二进制形式输出到文件中,调用puts、fprintf、等函数输出的都是ASCII 文本,尤其需要注意的是类似于上面代码段中那样,在C+中,即使你用fsiendl 语句来输出一个整数,输出到二进制文件中的仍然是文本格式!来读取以二进制文件格式存储的整数!(注:中午我试过了,不行!这再次证明只能读入文本格式的数字)今天终于弄明白怎样使用C+读写二进制文件了。要读取文件必须包含头文件,这里包含了C+读写文件的方法。可以使用fstream 类,这个类可以对文件进行读写操作。1、打开文件。打开文件可以有两种方式,第一种可以使用fstream 类的构造函数。fstream file(test.dat,ios_base:in|ios_base:out|ios_base:app);另外一种方法就是使用open 函数。fstream file;file.open(test.dat,ios_base:in|ios_base:out|ios_base:app);这样就可以打开一个可读写的文件了。如果文件不存在的话,就会创建一个新文件并且以读写方式打开。这里需要说明一点,如果文件不存在的话,open 函数中第二个参数必须包含ios_base:out|ios_base:app,2、写文件。先进性写文件的操作否则读一个空文件是没有意义的。既然是写二进制文件可以向文件中写入一个整形值。写二进制字符只能使用write 函数。但是write 函数的原形是write(const char * ch, int size)。第一个参数是char *类型,所以需要把将要写入文件的int 类型转换成char *类型。这里的转换困扰了我好几天,不过终于弄明白了。代码如下。int temp;file.write(char *)(&temp),sizeof(temp);3、读文件。可以写文件了,读文件就好办多了。读文件需要用到read 函数。其参数和write 大致相同,read(const char * ch, int size)。要把内容读到int 类型变量中同样涉及到一个类型转换的问题。和写文件一样。int readInt;file.read(char *)(&readInt),sizeof(readInt);这样文件中的int 值就读入到int 型变量readInt 中了。4、文件指针。在文件的读写过程中往往需要对文件进行选择性读取。所以需要进行文件指针的移动。这是需要用到seekg 和seekp 函数。在fstream 类中有两个文件指针,一个是读取文件的指针,一个是写文件的指针分别用tellg 和tellp 文件来取得指针的位置。同样seekg 和seekp 两个函数分别是对这两个指针进行移动的函数。这两个函数的参数都是一样的。先对几个枚举类型进行一下说明:ios_base:beg 文件开始位置ios_base:cur 文件当前位置ios_base:end 文件末尾位置下面以seekg 为例说明一下指针移动的方法:file.seekg(3) 指针移动到第三个字符的位置file.seekg(ios_base:beg) 指针移动到文件开头file.seekg(ios_base:end) 指针移动到文件末尾file.seekg(-3,ios_base:cur) 指针当前位置向前移动三个字符file.seekg(3,ios_base:cur) 指针当前位置向后移动三个字符file.seekg(3,file.tellg() 指针当前位置向后移动三个字符file.seekg(file.tellg()+3) 指针当前位置向后移动三个字符5、对文件操作完毕后别忘了关闭文件。file.close();以上5 个步骤就完成了对文件的读写操作。文本文件的操作是相同的,比二进制文件还要简单。- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二进制文件 读写 以及 相关 心得
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文