最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中二進(jìn)制數(shù)據(jù)序列化和反序列化詳解

 更新時(shí)間:2023年11月29日 09:42:15   作者:川谷_  
這篇文章主要為大家詳細(xì)介紹了C++中二進(jìn)制數(shù)據(jù)序列化和反序列化的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下

一、基礎(chǔ)知識(shí)

1、memcpy:內(nèi)存拷貝函數(shù)

函數(shù)原型:void *memcpy(void *dest, const void *src, size_t count);

2、代碼編寫(xiě)(采用循環(huán)的方式將字節(jié)內(nèi)容逐一拷貝)

void* my_memcpy(void* dest, const void* src, size_t count)
{
	assert(dest);  //防止函數(shù)接受空指針進(jìn)行操作
	assert(src);
 
	void* ret = dest;
	while (count--)
	{
		*(char*)dest = *(char*)src;
		dest = (char*)dest + 1;
		src = (char*)src + 1;
	}
	return ret;
}

3、c_str()函數(shù):可以將const string* 類(lèi)型 轉(zhuǎn)換為 const char* 類(lèi)型

二、什么是數(shù)據(jù)序列化和數(shù)據(jù)反序列化

數(shù)據(jù)序列化:將對(duì)象變成字節(jié)流的形式傳出去

數(shù)據(jù)反序列化:從字節(jié)流恢復(fù)成原來(lái)的對(duì)象

三、為什么需要讀數(shù)據(jù)進(jìn)行序列化和反序列化處理

1、序列號(hào)可以將數(shù)據(jù)轉(zhuǎn)換為一種格式,使其容易通過(guò)網(wǎng)絡(luò)進(jìn)行傳輸和存儲(chǔ)。反序列化則可以將序列化后的數(shù)據(jù)還原為原始形式,以便后續(xù)進(jìn)行處理

2、內(nèi)存中對(duì)象轉(zhuǎn)換為二進(jìn)制數(shù)據(jù):當(dāng)需要將對(duì)象的狀態(tài)傳輸?shù)竭h(yuǎn)程機(jī)器,或?qū)⑵浯鎯?chǔ)在磁盤(pán)上時(shí),就需要將對(duì)象轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)。

3、二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為內(nèi)存中的對(duì)象:當(dāng)需要從遠(yuǎn)程機(jī)器或磁盤(pán)中讀取對(duì)象狀態(tài)時(shí),需要將已序列化的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為原始對(duì)象。

四、數(shù)據(jù)序列化處理

struct Student
{
	string name;
	string grade;
	int age;
	double scale;
};
//數(shù)據(jù)序列化
char* serialization(Student* student)
{
	int size = sizeof(Student);
	char* pBuf = new char[size];
 
	//記錄指針的位置
	int num = 0;
 
	memcpy((pBuf + num), student->name.c_str(), 8);
	num += 8;
 
	memcpy((pBuf + num), student->grade.c_str(), 8);
	num += 8;
 
	*(int *)(pBuf + num) = student->age;
	num += 4;
 
	*(double*)(pBuf + num) = student->scale;
 
	return pBuf;
}

五、數(shù)據(jù)反序列化處理

void deserialization(char* data)
{
	string name;
	string garde;
	int age;
	double scale;
 
	//記錄指針的位置
	int num = 0; 
 
	name = (data + num);
	num += 8;
 
	garde = (data + num);
	num += 8;
 
	age = *(int*)(data + num);
	num += 4;
 
	scale = *(double*)(data + num);
 
	cout << "name:" << name << endl;
	cout << "garde:" << garde << endl;
	cout << "age:" << age << endl;
	cout << "scale:" << scale << endl;
}

六、運(yùn)行處理

int main()
{
	Student student;
	student.name = "Jim";
	student.grade = "ten";
	student.age = 12;
	student.scale = 88;
 
	char* data = serialization(&student);
 
	deserialization(data);
 
	return 0;
}

以上就是C++中二進(jìn)制數(shù)據(jù)序列化和反序列化詳解的詳細(xì)內(nèi)容,更多關(guān)于C++二進(jìn)制數(shù)據(jù)序列化和反序列化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C語(yǔ)言if選擇結(jié)構(gòu)語(yǔ)句詳解

    C語(yǔ)言if選擇結(jié)構(gòu)語(yǔ)句詳解

    大家好,本篇文章主要講的是C語(yǔ)言if選擇結(jié)構(gòu)語(yǔ)句詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽
    2021-12-12
  • MATLAB算法技巧和實(shí)現(xiàn)斐波那契數(shù)列的解決思路

    MATLAB算法技巧和實(shí)現(xiàn)斐波那契數(shù)列的解決思路

    這篇文章主要介紹了MATLAB算法技巧和實(shí)現(xiàn)斐波那契數(shù)列,這篇主要說(shuō)一下自己在算法設(shè)計(jì)課上用matlab做的兩道算法題,題目解起來(lái)都比較簡(jiǎn)單,但是需要些技巧,需要的朋友可以參考下
    2022-12-12
  • VC++文件監(jiān)控之ReadDirectoryChangesW

    VC++文件監(jiān)控之ReadDirectoryChangesW

    文章主要介紹文件監(jiān)控的另一種實(shí)現(xiàn)方式,利用ReadDirectoryChangesW來(lái)實(shí)現(xiàn)文件的監(jiān)控,希望對(duì)大家有幫助
    2019-04-04
  • C語(yǔ)言線(xiàn)性表順序表示及實(shí)現(xiàn)

    C語(yǔ)言線(xiàn)性表順序表示及實(shí)現(xiàn)

    這篇文章主要介紹了C語(yǔ)言線(xiàn)性表順序表示及實(shí)現(xiàn),線(xiàn)性表是最常用且最簡(jiǎn)單的一種數(shù)據(jù)結(jié)構(gòu)。簡(jiǎn)而言之,一個(gè)線(xiàn)性表是n個(gè)數(shù)據(jù)元素的有限序列
    2022-07-07
  • Windows進(jìn)程崩潰問(wèn)題的定位方法

    Windows進(jìn)程崩潰問(wèn)題的定位方法

    這篇文章主要介紹了Windows進(jìn)程崩潰問(wèn)題的定位方法,本文使用nstd工具進(jìn)行進(jìn)程崩潰時(shí)內(nèi)存和堆棧轉(zhuǎn)儲(chǔ)的方法查明問(wèn)題所在,需要的朋友可以參考下
    2015-04-04
  • C++實(shí)現(xiàn)順序表的常用操作(插入刪出查找輸出)

    C++實(shí)現(xiàn)順序表的常用操作(插入刪出查找輸出)

    實(shí)現(xiàn)順序表的插入,刪除,查找,輸出操作在C語(yǔ)言中經(jīng)常用到。下面小編給大家整理實(shí)現(xiàn)代碼,一起看下吧
    2016-08-08
  • C++編程中break語(yǔ)句和continue語(yǔ)句的學(xué)習(xí)教程

    C++編程中break語(yǔ)句和continue語(yǔ)句的學(xué)習(xí)教程

    這篇文章主要介紹了C++編程中break語(yǔ)句和continue語(yǔ)句的學(xué)習(xí)教程,break和continue是C++循環(huán)控制中的基礎(chǔ)語(yǔ)句,需要的朋友可以參考下
    2016-01-01
  • windows下安裝QT及visual studio 2017搭建開(kāi)發(fā)環(huán)境

    windows下安裝QT及visual studio 2017搭建開(kāi)發(fā)環(huán)境

    這篇文章主要介紹了windows下安裝QT及visual studio 2017搭建開(kāi)發(fā)環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C語(yǔ)言的分支和循環(huán)語(yǔ)句你了解嗎

    C語(yǔ)言的分支和循環(huán)語(yǔ)句你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的分支和循環(huán)語(yǔ)句,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C++之vector容器的的聲明初始化和增刪改查

    C++之vector容器的的聲明初始化和增刪改查

    這篇文章主要給大家介紹了關(guān)于C++vector容器的的聲明初始化和增刪改查的相關(guān)資料,向量(Vector)是一個(gè)封裝了動(dòng)態(tài)大小數(shù)組的順序容器(Sequence Container),跟任意其它類(lèi)型容器一樣,它能夠存放各種類(lèi)型的對(duì)象,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

孟村| 庐江县| 金溪县| 葵青区| 丹凤县| 庄浪县| 正蓝旗| 务川| 鹤庆县| 镇康县| 堆龙德庆县| 宣化县| 深泽县| 克拉玛依市| 兴城市| 敦煌市| 锦屏县| 临沂市| 互助| 灵台县| 漳州市| 东乌| 桐柏县| 山东| 招远市| 伊宁市| 资中县| 凤城市| 江油市| 固阳县| 永新县| 文山县| 旌德县| 陕西省| 家居| 西丰县| 大方县| 湟中县| 通榆县| 虞城县| 京山县|