QT中QByteArray與char、int、float之間的互相轉(zhuǎn)化
1.問題來(lái)源
要用SQLite數(shù)據(jù)庫(kù)去保存一段定長(zhǎng)的char型數(shù)組,里面可能有\(zhòng)0等字符,所以當(dāng)作字符串varchar處理鐵定丟失數(shù)據(jù),所以要用二進(jìn)制保存BLOB,這樣對(duì)應(yīng)的QT數(shù)據(jù)類型要用QByteArray進(jìn)行處理,原來(lái)只用到QByteArray轉(zhuǎn)換成 char* 類型,其它的轉(zhuǎn)換還沒搞過(guò),一弄發(fā)現(xiàn)還是有些門道,為了以后不再繼續(xù)造輪子,就先寫出來(lái),標(biāo)記一下。
2.QByteArray與char*的轉(zhuǎn)換
2.1 QByteArray 轉(zhuǎn) char*
方式1 傳統(tǒng)方式data()和size()函數(shù) (方便)
QByteArray array(10, 'Q');//初始化 //array 賦值等代碼 //... // 轉(zhuǎn)化 char *buf;//只是一個(gè)指針 int len;//buf的長(zhǎng)度 buf = array.data(); len = array.size();
方式2 memcpy()方式 (靈活)
QByteArray array(9,'Q'); char buf[10];//數(shù)組 int len_array = array.size(); int len_buf = sizeof(buf); int len = qMin( len_array, len_buf ); // 轉(zhuǎn)化 memcpy( buf, array, ?len );
2.2 char* 轉(zhuǎn) QByteArray
方法1 利用構(gòu)造函數(shù) (方便)
char buf[10]; //給buf賦值 for (int i = 0; i < 10; i++) { ? ? buf[i] = (i + 1) % 3;//其中存在'\0'元素 } // 轉(zhuǎn)化 QByteArray array; array = QByteArray(buf, 10);//因?yàn)閎uf[]中有`\0`,必須要寫上數(shù)據(jù)長(zhǎng)度;否則,數(shù)據(jù)會(huì)直接截?cái)?,丟失數(shù)據(jù)
方式2 memcpy()方式 (靈活)
char buf[10]; //給buf賦值 for (int i = 0; i < 10; i++) { ? ? buf[i] = (i + 1) % 3;//其中存在'\0'元素 } // 轉(zhuǎn)化 QByteArray array; array.resize(sizeof(buf));//重置數(shù)據(jù)大小 memcpy(array.data(), buf, sizeof(buf));//copy數(shù)據(jù)
3.QByteArray與int 以及int[] 的轉(zhuǎn)換
3.1. int 與 QByteArray 互轉(zhuǎn)
[1] int 轉(zhuǎn) QByteArray
// int 轉(zhuǎn) QByteArray int ?intVar = 199; QByteArray array; int len_intVar = sizeof(intVar); array.resize(len_intVar); memcpy(array.data(), &intVar, len_intVar);
[2]QByteArray 轉(zhuǎn) int
// QByteArray 轉(zhuǎn) int // array 數(shù)據(jù)接上面 int outIntVar; memcpy(&outIntVar, array.data(), len_intVar); //memcpy(&outIntVar, array, len_intVar);//此行代碼與上句通用
3.2. int[] 與 QByteArray 互轉(zhuǎn)
[1] int[] 轉(zhuǎn) QByteArray
// int[] 轉(zhuǎn) QByteArray // int[] 轉(zhuǎn) QByteArray int ?intVar[4] = {1,2,9,0};//初始化變量賦值 QByteArray array; int len_intVar = sizeof(intVar); array.resize(len_intVar); //轉(zhuǎn)換 int[] -> QByteArray memcpy(array.data(), &intVar, len_intVar);
[2]QByteArray 轉(zhuǎn) int[]
// QByteArray 轉(zhuǎn) int[] // array 數(shù)據(jù)接上面 int outIntVar[4]; memcpy(&outIntVar, array.data(), len_intVar); //memcpy(&outIntVar, array, len_intVar);//此行代碼與上句通用
4.QByteArray與float 以及float[] 的轉(zhuǎn)換
其實(shí)完全可以參考第3節(jié),int的用法.
4.1. float[] 與 QByteArray 互轉(zhuǎn)
[1] float[] 轉(zhuǎn) QByteArray
// float[] 轉(zhuǎn) QByteArray float ?fVar[4] = { 1.1, 2.3, 9.5, 0.2 };//初始化變量賦值 QByteArray array; int len_fVar = sizeof(fVar); // 4*4 = 16 (一個(gè)float占4個(gè)字節(jié)) array.resize(len_intVar); memcpy(array.data(), &fVar, len_fVar);
[2]QByteArray 轉(zhuǎn) float[]
// QByteArray 轉(zhuǎn) float[] float outFvar[4]; memcpy(&outIntVar, array.data(), len_fVar); //memcpy(&outFvar, array, len_fVar);//此行代碼與上句通用
4.2. float 與 QByteArray 互轉(zhuǎn)
可以安全參考int。
到此這篇關(guān)于QT中QByteArray與char、int、float之間的互相轉(zhuǎn)化的文章就介紹到這了,更多相關(guān)QT QByteArray與char、int、float互相轉(zhuǎn)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言文件操作中 fgets與fputs 函數(shù)詳解
這篇文章主要介紹了C語(yǔ)言文件操作中 fgets與fputs 函數(shù)詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06簡(jiǎn)單談?wù)凜++ 頭文件系列之(algorithm)
<algorithm>是c++特有的STL模板的算法頭文件 包含了一些特定的算法函數(shù) 包括sort(),stable_sort(),partical_sort(),nth_element()等常用的算法函數(shù)2017-02-02C語(yǔ)言動(dòng)態(tài)內(nèi)存管理介紹
大家好,本篇文章主要講的是C語(yǔ)言動(dòng)態(tài)內(nèi)存管理介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)順序表的進(jìn)階講解
程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要?jiǎng)?chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個(gè)數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲(chǔ)區(qū)里,元素間的順序關(guān)系由它們的存儲(chǔ)順序自然表示2022-04-04Visual Studio Code (vscode) 配置 C / C++ 環(huán)境的流程
這篇文章主要介紹了Visual Studio Code (vscode) 配置 C / C++ 環(huán)境的流程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09基于C++實(shí)現(xiàn)信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于C++實(shí)現(xiàn)信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C語(yǔ)言實(shí)現(xiàn)數(shù)組的循環(huán)移位的方法示例
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)數(shù)組的循環(huán)移位的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08