C++ 读取二进制文件

通过二进制的方式打开文件后,可以使用 r e a d read read 进行读取指定字节的数据流。

istream & read(char *buffer, int count);

这个函数第一个参数是一个 c h a r ∗ char * char,当我们读取一个结构体时,例如:

struct A
{
	int b;
	long c;
};

可以通过 C++ \text{C++} C++ reinterpret_cast&lt;new_type&gt;(expression) \text{reinterpret\_cast&lt;new\_type&gt;(expression)} reinterpret_cast<new_type>(expression) 将 A 转换成 c h a r ∗ char * char

A a;
ifstream file("file_path", ios::in | ios::binary);
file.read(reinterpret_cast<char *>(&a), sizeof(a)); 

这样便可以通过 a . b a.b a.b 的方式进行访问数据。

也可以定义一个字符串进行读取数据流,这样便省去了强制转换的需要,

int sz = 100;
char *buf = new char[sz];
file.read(buf, sz);

这里需要注意的是,由于是按照二进制读取的字节流,所以 b u f buf buf 里的东西直接打印出来可能和想象中的长度不一样,使用 s t r l e n strlen strlen 函数获取的长度可能也不等于 s z sz sz,这是由于读取的字节流里并不能避免终止符 \0 的存在,而 c h a r ∗ char * char 是一个比较特殊的指针,当打印它的时候,会一直打印到终止符为止, s t r l e n strlen strlen 获取长度也是通过遍历到终止符来确定字符串的长度,所以在这里只有 s z sz sz 能确定 b u f buf buf 的长度。虽然可能无法打印足够长的 b u f buf buf(可以一个一个字符打印),但是 b u f buf buf 里的数据并没有丢失,依然可以用来进行其他处理。

全部评论

相关推荐

2024-12-29 19:48
河北科技大学 Java
没事就爱看简历:问题不在于简历:1、大学主修课程学那么多应用语言,作为计算机专业是很难理解的。 2、技能部分,每一个技能点的后半句话,说明对熟练,熟悉的标准有明显误会。 3、项目应该是校企合作的练习吧,这个项目你负责什么,取得了哪些成果都没有提及,只是列举了你认为有技术含量的点,而这些都有成熟的实现。
点赞 评论 收藏
分享
做人要有梦想dji:最新工位查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 听劝,这个简历怎么改 #
14064次浏览 182人参与
# 面试被问“你的缺点是什么?”怎么答 #
6309次浏览 98人参与
# 水滴春招 #
16228次浏览 341人参与
# 入职第四天,心情怎么样 #
11265次浏览 63人参与
# 租房找室友 #
7997次浏览 53人参与
# 读研or工作,哪个性价比更高? #
26139次浏览 356人参与
# 职场新人生存指南 #
199165次浏览 5506人参与
# 参加完秋招的机械人,还参加春招吗? #
26960次浏览 276人参与
# 文科生还参加今年的春招吗 #
4101次浏览 31人参与
# 简历无回复,你会继续海投还是优化再投? #
48608次浏览 561人参与
# 你见过最离谱的招聘要求是什么? #
144708次浏览 829人参与
# 如果重来一次你还会读研吗 #
155712次浏览 1706人参与
# 机械人选offer,最看重什么? #
69076次浏览 449人参与
# 选择和努力,哪个更重要? #
44261次浏览 492人参与
# 如果再来一次,你还会学硬件吗 #
103638次浏览 1245人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
20517次浏览 413人参与
# 招聘要求与实际实习内容不符怎么办 #
46662次浏览 494人参与
# 22届毕业,是读研还是拿外包offer先苟着 #
4652次浏览 27人参与
# 你们的毕业论文什么进度了 #
901179次浏览 8960人参与
# 软开人,你觉得应届生多少薪资才算合理? #
81368次浏览 496人参与
# 国企还是互联网,你怎么选? #
109188次浏览 853人参与
牛客网
牛客企业服务