C++?二進(jìn)制文件讀寫(xiě)方式及示例詳解
C++ 二進(jìn)制文件讀寫(xiě)
C++語(yǔ)言提供了使用二進(jìn)制文件進(jìn)行數(shù)據(jù)處理的方法,可以讀入和寫(xiě)出數(shù)據(jù),保留數(shù)據(jù)的二進(jìn)制格式,而不會(huì)受到字符編碼的干擾。這種方法的使用非常靈活,尤其是處理大量數(shù)據(jù)的時(shí)候。
二進(jìn)制文件是由一連串字節(jié)組成的,可以保留數(shù)據(jù)的真實(shí)值,而不需要像文本文件那樣以可讀的方式呈現(xiàn)。每個(gè)字節(jié)都有一個(gè)二進(jìn)制值,可以存儲(chǔ)各種類型的數(shù)據(jù),如字符、整數(shù)、浮點(diǎn)數(shù)等。因此,相對(duì)于文本文件,二進(jìn)制文件可以更快地讀取、寫(xiě)入數(shù)據(jù),而且能夠減少磁盤(pán)空間的占用。此外,二進(jìn)制文件還可以用于存儲(chǔ)圖像、聲音、視頻等非文本數(shù)據(jù)。
一、二進(jìn)制文件的讀寫(xiě)方式
二進(jìn)制文件的讀寫(xiě)方式有兩種:讀入和寫(xiě)出。讀入時(shí),將二進(jìn)制數(shù)據(jù)讀入到內(nèi)存,寫(xiě)出時(shí),將內(nèi)存中的數(shù)據(jù)寫(xiě)入二進(jìn)制文件。在C++語(yǔ)言中,可以使用兩種標(biāo)準(zhǔn)庫(kù)函數(shù)完成文件讀寫(xiě)操作,分別是fread()和fwrite()函數(shù)。下面我們通過(guò)代碼來(lái)了解這兩個(gè)函數(shù)如何使用。
二、C++二進(jìn)制文件讀寫(xiě)示例
寫(xiě)入二進(jìn)制文件:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
// 定義一個(gè)結(jié)構(gòu)體
struct student
{
int id; // 學(xué)號(hào)
char name[20]; // 姓名
double score; // 成績(jī)
} s1 = {1001, "張三", 90.5}, s2 = {1002, "李四", 80.5};
// 將結(jié)構(gòu)體寫(xiě)入二進(jìn)制文件
ofstream fout("student.dat", ios::binary);
if (fout)
{
fout.write((char*)&s1, sizeof(student));
fout.write((char*)&s2, sizeof(student));
fout.close();
}
return 0;
}
在這個(gè)例子中,我們創(chuàng)建了一個(gè)叫做student的結(jié)構(gòu)體并初始化了2個(gè)結(jié)構(gòu)體數(shù)據(jù)。然后用C++標(biāo)準(zhǔn)庫(kù)函數(shù)ofstream打開(kāi)文件student.dat,并以二進(jìn)制方式打開(kāi),并將結(jié)構(gòu)體寫(xiě)入到文件中。最后關(guān)閉文件。
讀取二進(jìn)制文件:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
// 定義一個(gè)結(jié)構(gòu)體
struct student
{
int id; // 學(xué)號(hào)
char name[20]; // 姓名
double score; // 成績(jī)
} s;
// 從二進(jìn)制文件中讀取結(jié)構(gòu)體數(shù)據(jù)
ifstream fin("student.dat", ios::binary);
if (fin)
{
fin.read((char*)&s, sizeof(student));
while (!fin.eof())
{
cout<< "學(xué)號(hào):" << s.id<< ",姓名:" << s.name<< ",成績(jī):" << s.score<< endl;
fin.read((char*)&s, sizeof(student));
}
fin.close();
}
return 0;
}
在這個(gè)例子中,我們使用了C++標(biāo)準(zhǔn)庫(kù)函數(shù)ifstream打開(kāi)了文件student.dat,并以二進(jìn)制方式打開(kāi),然后使用fin.read()讀取前面寫(xiě)入的兩條記錄。因?yàn)槲覀冎牢募杏涗浀臄?shù)量,所以我們使用一個(gè)while循環(huán),直到文件末尾為止。在每次循環(huán)中,使用cout打印出每個(gè)學(xué)生的學(xué)號(hào)、姓名和成績(jī),并使用fin.read()讀取下一條記錄。最后關(guān)閉文件。
總結(jié):
以上就是C++中使用二進(jìn)制文件進(jìn)行數(shù)據(jù)處理的方法,通過(guò)fwrite()和fread()函數(shù)可以方便地進(jìn)行二進(jìn)制數(shù)據(jù)的讀寫(xiě)操作,而使用fstream.h向文件中寫(xiě)入二進(jìn)制數(shù)據(jù)則更加靈活。需要注意的是,在讀寫(xiě)操作時(shí)需要注意文件的打開(kāi)方式,以及指針的位置等問(wèn)題。
- C++使用read()和write()讀寫(xiě)二進(jìn)制文件
- C\C++實(shí)現(xiàn)讀寫(xiě)二進(jìn)制文件的方法詳解
- C++用read()和write()讀寫(xiě)二進(jìn)制文件的超詳細(xì)教程
- C++讀寫(xiě)(CSV,Yaml,二進(jìn)制)文件的方法詳解
- C/C++中二進(jìn)制文件&順序讀寫(xiě)詳解及其作用介紹
- C/C++讀寫(xiě)文本文件、二進(jìn)制文件的方法
- 利用C/C++二進(jìn)制讀寫(xiě)png文件的方法示例
- 詳解C++編程中對(duì)二進(jìn)制文件的讀寫(xiě)操作
- C++實(shí)現(xiàn)文本與二進(jìn)制文件讀寫(xiě)操作的示例
相關(guān)文章
visual?studio?2022一個(gè)不易發(fā)現(xiàn)的問(wèn)題
本文主要介紹了visual?studio?2022一個(gè)不易發(fā)現(xiàn)的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
對(duì)C語(yǔ)言編程標(biāo)準(zhǔn)以及聲明的基本理解
這篇文章主要介紹了對(duì)C語(yǔ)言編程標(biāo)準(zhǔn)以及聲明的基本理解,有助于對(duì)C語(yǔ)言編寫(xiě)時(shí)的結(jié)構(gòu)有更加清晰的認(rèn)識(shí),需要的朋友可以參考下2015-11-11
C++實(shí)現(xiàn)LeetCode(198.打家劫舍)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(198.打家劫舍),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
C++中std::distance 和 .size()的區(qū)別小結(jié)
在C++中,std::distance和.size()雖然都能獲取元素?cái)?shù)量,但二者的設(shè)計(jì)目的、適用場(chǎng)景和性能特性有顯著差異,下面就來(lái)介紹一下兩者的區(qū)別,感興趣的可以了解一下2025-07-07

