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::out
或 std::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):字符串
- C++入门(21):二进制文件、C风格字符串
- C风格字符串[C++]
- C 风格字符串 (c++primer)
- C++(6)C风格字符串
- c风格字符串
- C风格字符串
- C/C++风格字符串
- C风格的字符串
- c风格字符串
- c风格的字符串
- C风格字符串
- C风格字符串
- 4.3 C风格字符串
- c 风格字符串总结
- c 风格字符串总结
- C风格的字符串
- C风格字符串
- C风格字符串函数
- 基于XMPP协议的aSmack源码分析【0】UML
- C#操作Excel文件(读取Excel,写入Excel)
- 如何写出一篇高质量的技术解决方案文档(一)
- 《将博客搬至CSDN》
- 文字保护纱-Material Design
- C++入门(21):二进制文件、C风格字符串
- 最长上升子序列(LIS)长度的O(nlogn)算法
- 理解数组指针和指针数组的区别
- [置顶]Android 项目开发 基于Web Service 服务的中英翻译软件(一)功能介绍
- [置顶]Android 项目开发 基于Web Service 服务的中英翻译软件(二)主界面
- [置顶]Android 项目开发 基于Web Service 服务的中英翻译软件(三) Web Service服务 & Ksoap2 项目
- android adb root方法
- 面对Schema free的MongoDB,如何规范你的schema
- [置顶]Android 项目开发 基于Web Service 服务的中英翻译软件(四)使用Sqlite “辅助” Web Service