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

QT中QByteArray與char、int、float之間的互相轉(zhuǎn)化

 更新時(shí)間:2022年05月19日 11:06:36   作者:祥知道  
本文主要介紹了QT中QByteArray與char、int、float之間的互相轉(zhuǎn)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1.問(wèn)題來(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)換還沒(méi)搞過(guò),一弄發(fā)現(xiàn)還是有些門道,為了以后不再繼續(xù)造輪子,就先寫(xiě)出來(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`,必須要寫(xiě)上數(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++內(nèi)存四區(qū)之代碼區(qū)、全局區(qū)、棧區(qū)和堆區(qū)

    C++內(nèi)存四區(qū)之代碼區(qū)、全局區(qū)、棧區(qū)和堆區(qū)

    C++編譯器會(huì)把代碼直接分為四個(gè)小區(qū),弄懂這四小區(qū)對(duì)我們理解內(nèi)存有所幫助,所以下面這篇文章主要給大家介紹了關(guān)于C++內(nèi)存四區(qū)之代碼區(qū)、全局區(qū)、棧區(qū)和堆區(qū)的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • C++?自定義單向鏈表?ListNode詳情

    C++?自定義單向鏈表?ListNode詳情

    這篇文章主要介紹了C++?自定義單向鏈表?ListNode詳情,文章將介紹鏈表中不帶頭結(jié)點(diǎn),沒(méi)有存放鏈表長(zhǎng)度的節(jié)點(diǎn),從頭結(jié)點(diǎn)開(kāi)始就存放數(shù)據(jù)得一種,具有一定得參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03
  • C++中強(qiáng)類型枚舉(scoped enumeration)的實(shí)現(xiàn)

    C++中強(qiáng)類型枚舉(scoped enumeration)的實(shí)現(xiàn)

    C++11引入的強(qiáng)類型枚舉解決了傳統(tǒng)枚舉的三大缺陷:作用域污染、隱式類型轉(zhuǎn)換和底層類型不確定,本文就來(lái)詳細(xì)的介紹一下強(qiáng)類型枚舉的使用,感興趣的可以了解一下
    2025-11-11
  • C語(yǔ)言堆結(jié)構(gòu)處理TopK問(wèn)題詳解

    C語(yǔ)言堆結(jié)構(gòu)處理TopK問(wèn)題詳解

    TopK問(wèn)題即在N個(gè)數(shù)中找出最大的前K個(gè),這篇文章將詳細(xì)講解如何利用小根堆的方法解決TopK問(wèn)題,文中代碼具有一定參考價(jià)值,快跟隨小編一起學(xué)習(xí)一下吧
    2022-06-06
  • 深入理解線程安全與Singleton

    深入理解線程安全與Singleton

    在編譯器未優(yōu)化的情況下順序如下:1.new operator分配適當(dāng)?shù)膬?nèi)存;2.在分配的內(nèi)存上構(gòu)造Singleton對(duì)象;3.內(nèi)存地址賦值給_instance
    2013-09-09
  • C++ Opencv自寫(xiě)函數(shù)實(shí)現(xiàn)膨脹腐蝕處理技巧

    C++ Opencv自寫(xiě)函數(shù)實(shí)現(xiàn)膨脹腐蝕處理技巧

    這篇文章主要介紹了C++ Opencv 自寫(xiě)函數(shù)實(shí)現(xiàn)膨脹腐蝕處理,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • 記錄一個(gè)C++在條件查詢時(shí)遇到的問(wèn)題(推薦)

    記錄一個(gè)C++在條件查詢時(shí)遇到的問(wèn)題(推薦)

    這篇文章主要介紹了記錄一個(gè)C++在條件查詢時(shí)遇到的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • C++實(shí)現(xiàn)LeetCode(27.移除元素)

    C++實(shí)現(xiàn)LeetCode(27.移除元素)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(27.移除元素),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • c++ 解析yaml文件的步驟

    c++ 解析yaml文件的步驟

    這篇文章主要介紹了c++ 解析yaml文件的步驟,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2020-12-12
  • C++深入探究用NULL來(lái)初始化空指針是否合適

    C++深入探究用NULL來(lái)初始化空指針是否合適

    在C++11新特性中,我們用nullptr來(lái)表示指針空值,這是為什么呢?好好地NULL為什么不繼續(xù)使用呢?說(shuō)明在創(chuàng)造C++的大佬們一定發(fā)現(xiàn)了什么Bug,本篇我們就一起來(lái)討論一下吧
    2022-05-05

最新評(píng)論

通道| 江安县| 景德镇市| 辉县市| 海安县| 仪征市| 若羌县| 福州市| 平果县| 老河口市| 大连市| 闵行区| 夏河县| 海淀区| 开原市| 巢湖市| 兴文县| 河南省| 梁平县| 宿迁市| 定边县| 保康县| 高密市| 临颍县| 宜兰县| 塔城市| 鹤壁市| 杨浦区| 通江县| 沧州市| 灌阳县| 金乡县| 大英县| 龙山县| 江都市| 乐业县| 时尚| 永德县| 保靖县| 曲靖市| 瑞金市|