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

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

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

1.問題來源

要用SQLite數(shù)據(jù)庫去保存一段定長的char型數(shù)組,里面可能有\(zhòng)0等字符,所以當(dāng)作字符串varchar處理鐵定丟失數(shù)據(jù),所以要用二進制保存BLOB,這樣對應(yīng)的QT數(shù)據(jù)類型要用QByteArray進行處理,原來只用到QByteArray轉(zhuǎn)換成 char* 類型,其它的轉(zhuǎn)換還沒搞過,一弄發(fā)現(xiàn)還是有些門道,為了以后不再繼續(xù)造輪子,就先寫出來,標記一下。

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;//只是一個指針
int len;//buf的長度
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);//因為buf[]中有`\0`,必須要寫上數(shù)據(jù)長度;否則,數(shù)據(jù)會直接截斷,丟失數(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)換

其實完全可以參考第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 (一個float占4個字節(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言刷題判斷鏈表中是否有環(huán)題解

    C語言刷題判斷鏈表中是否有環(huán)題解

    這篇文章主要為大家介紹了C語言刷題判斷鏈表中是否有環(huán)題解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • C++游戲編程之模擬實現(xiàn)鍵盤打字程序

    C++游戲編程之模擬實現(xiàn)鍵盤打字程序

    這篇文章主要介紹了通過C++模擬實現(xiàn)鍵盤打字的功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)C++有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • C語言文件操作中 fgets與fputs 函數(shù)詳解

    C語言文件操作中 fgets與fputs 函數(shù)詳解

    這篇文章主要介紹了C語言文件操作中 fgets與fputs 函數(shù)詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 簡單談?wù)凜++ 頭文件系列之(algorithm)

    簡單談?wù)凜++ 頭文件系列之(algorithm)

    <algorithm>是c++特有的STL模板的算法頭文件 包含了一些特定的算法函數(shù) 包括sort(),stable_sort(),partical_sort(),nth_element()等常用的算法函數(shù)
    2017-02-02
  • C語言動態(tài)內(nèi)存管理介紹

    C語言動態(tài)內(nèi)存管理介紹

    大家好,本篇文章主要講的是C語言動態(tài)內(nèi)存管理介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C語言數(shù)據(jù)結(jié)構(gòu)順序表的進階講解

    C語言數(shù)據(jù)結(jié)構(gòu)順序表的進階講解

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要創(chuàng)建這種元素組,用變量記錄它們,傳進傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關(guān)系由它們的存儲順序自然表示
    2022-04-04
  • C++命名空間使用詳細介紹

    C++命名空間使用詳細介紹

    考慮一種情況,當(dāng)我們有兩個同名的人,Zara,在同一個班里。當(dāng)我們需要對它們進行區(qū)分我們必須使用一些額外的信息和它們的名字,比如它們生活在不同的區(qū)域或者興趣愛好什么的,在C++程序中也會遇到同樣的情況,所以命名空間就此產(chǎn)生
    2022-09-09
  • Visual Studio Code (vscode) 配置 C / C++ 環(huán)境的流程

    Visual Studio Code (vscode) 配置 C / C++ 環(huán)境的流程

    這篇文章主要介紹了Visual Studio Code (vscode) 配置 C / C++ 環(huán)境的流程,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • 基于C++實現(xiàn)信息管理系統(tǒng)

    基于C++實現(xiàn)信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了基于C++實現(xiàn)信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言實現(xiàn)數(shù)組的循環(huán)移位的方法示例

    C語言實現(xiàn)數(shù)組的循環(huán)移位的方法示例

    這篇文章主要介紹了C語言實現(xiàn)數(shù)組的循環(huán)移位的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評論