C++入门(21):二进制文件、C风格字符串

来源:互联网 发布:怎么查看图片 html源码 编辑:程序博客网 时间:2024/05/21 23:30

C++入门(21):二进制文件、C风格字符串

二进制文件
可以通过写入二进制数据的办法来存储各种复杂的数据类型;
把数据写入二进制文件,其调用语法为:
std::ofstream fileOutput("filename",std::ios::binary);

如果想把新数据追加到现有数据后面,需要加上 std::ios.app,即
std::ofstream fileOutput("filename",(std::ios::binary) | (std::ios.app));

写二进制需要调用 write() 函数。它两个参数:第一个是将被写入文件的二进制数据在内存里的地址,这个值必须转换为一个char类型的指针;第二个参数是将被写入的二进制数据以字节计算的总长度,这个值必须精确,最精确的办法是用 sizeof 操作符来获得它。
比如:

int number = 345678;fileOutput.write(reinterpret_cast<char *>(&number), sizeof(number)) ;

<< 操作符是把文本发送过去,write() 函数则是把内存里的数据(它们永远是二进制的)复制过去,由于“发送”和“复制”的区别,write()函数的第一个参数必须是一个指针(某给定内存块的地址)。

C风格字符串
strncpy()函数有3个参数:第一个参数是目的地变量,第二个参数是源变量,第三个参数是本次复制的最大字符个数;
c_str()函数将把一个C++字符串转换为一个C字符数组(它会自动追加一个空白字符作为字符串结束标记)。

可以先创建一个fstream类型的变量,然后在打开文件时使用std::ios::outstd::ios::in 作为标志之一来表明要进行写或者读操作。

读出数据read()

std::ifstream fileInput("filename", std::ios::binary);  fileInput.read(reinterpret_cast<char *>(&var),sizeof(var));  //执行之后就可以通过var变量访问从文件读出来的数据了

大端字节(big endian):数据的最高位字节在内存里被存储在最前面;
小端字节(little ebdian): 数据的最高位字节在内存里被存储在最后面。

随机访问二进制文件
ifsteram 流有一个名为 get 的指针,它指向下次读操作将读取的数据;ofstream 流有一个名为 put 的指针,它指向下次写操作将写入的位置;fstream流有get和put两个指针。

get和put指针的当前位置可以用 tellg() 和 tellp() 函数分别查出来。这两个函数都将返回一个pos_type类型的值,本质上是一个 long 整数,用来标明 get 或 put 指针距离文件开头有多少个字节。

seekg()和seekp(): 第一个参数是移动距离;第二个参数可选,默认从文件开头算起,可取值为std::ios::begin、std::ios::end、std::ios.cur ;
文件的长度等于指针在文件末尾时的 tellg() 减去指针在文件开头时的 tellg()。

命令行参数
有些字符(如句点 . 和星号 * )在命令行里有其特殊的含义,如果想把它们用作命令行参数,必须用单引号把它们括起来。

C++入门(20):字符串

2 0