欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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++中實(shí)現(xiàn)云端存儲(chǔ)變量的操作步驟

    在C++中實(shí)現(xiàn)云端存儲(chǔ)變量的操作步驟

    隨著云計(jì)算技術(shù)的快速發(fā)展,現(xiàn)在我們可以將數(shù)據(jù)存儲(chǔ)在云端,以便于在不同設(shè)備和地點(diǎn)訪問(wèn),在C++中,我們也可以通過(guò)一些方法來(lái)實(shí)現(xiàn)這個(gè)功能,本文將詳細(xì)介紹如何在C++中實(shí)現(xiàn)云端存儲(chǔ)變量,需要的朋友可以參考下
    2023-11-11
  • 帶你粗略了解C++流的讀寫(xiě)文件

    帶你粗略了解C++流的讀寫(xiě)文件

    這篇文章主要為大家總結(jié)了C++中輸入輸出流及文件流操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能給你帶來(lái)幫助
    2021-08-08
  • c++中string類(lèi)型和int類(lèi)型相互轉(zhuǎn)換的幾種常用方法

    c++中string類(lèi)型和int類(lèi)型相互轉(zhuǎn)換的幾種常用方法

    我們?cè)诰帉?xiě)程序時(shí),經(jīng)常涉及到int與string之間的類(lèi)型轉(zhuǎn)換,本文主要介紹了c++中string類(lèi)型和int類(lèi)型相互轉(zhuǎn)換的幾種常用方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • C語(yǔ)言實(shí)現(xiàn)水波紋效果

    C語(yǔ)言實(shí)現(xiàn)水波紋效果

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)水波紋效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 介紹C語(yǔ)言程序中的注釋等輔助語(yǔ)句如何使用

    介紹C語(yǔ)言程序中的注釋等輔助語(yǔ)句如何使用

    C語(yǔ)言中分為單行注釋和多行注釋:?jiǎn)涡凶⑨?以?//?開(kāi)始的這一行文本,可能不被編譯器所支持;多行注釋從?/*?到?*/之間的所有文本,不支持嵌套,下面讓我們?cè)敿?xì)來(lái)了解
    2022-04-04
  • C++ OpenCV實(shí)戰(zhàn)之網(wǎng)孔檢測(cè)的實(shí)現(xiàn)

    C++ OpenCV實(shí)戰(zhàn)之網(wǎng)孔檢測(cè)的實(shí)現(xiàn)

    這篇文章主要介紹了如何利用C++和OpenCV實(shí)現(xiàn)網(wǎng)孔檢測(cè),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)OpenCV有一定幫助,感興趣的小伙伴可以了解一下
    2022-05-05
  • QT中在QLabel顯示圖片并且利用鼠標(biāo)點(diǎn)擊畫(huà)線問(wèn)題

    QT中在QLabel顯示圖片并且利用鼠標(biāo)點(diǎn)擊畫(huà)線問(wèn)題

    這篇文章主要介紹了QT中在QLabel顯示圖片并且利用鼠標(biāo)點(diǎn)擊畫(huà)線問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • OpenCV實(shí)現(xiàn)圖像校正功能

    OpenCV實(shí)現(xiàn)圖像校正功能

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)圖像校正功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • c++如何實(shí)現(xiàn)Base64算法

    c++如何實(shí)現(xiàn)Base64算法

    這篇文章主要介紹了c++如何實(shí)現(xiàn)Base64算法,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C++ Qt屬性系統(tǒng)詳細(xì)介紹

    C++ Qt屬性系統(tǒng)詳細(xì)介紹

    這篇文章主要介紹了C++ Qt屬性系統(tǒng)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12

最新評(píng)論