《Qt資料型別》--基本資料型別QByteArray,QString,char,byte之間的轉換
阿新 • • 發佈:2019-02-20
在上位機通訊中,根據通訊協議,有時候需要傳送16進位制的資料,本人在程式設計的時候容易把各種資料字面值和實際值搞混淆,故寫這篇文章給大家參考,也給自己提醒。
在Qt中串列埠的接收和傳送的資料型別都是QByteArray,因此我們需要在通訊的雙方進行資料轉換,此時我們根據通訊協議,有的裝置接收字串,而有的裝置接收16進位制的資料。
一般我們傳送16進位制的資料時使用長度為一個位元組的資料型別,比如char,然後在QByteArray的建構函式中初始化進行資料的傳輸。同時,0x41=65=‘A’,即在16進位制下該資料為0x41,在十進位制下為65,在ASCII碼下為字元A,這時,0x41和"0x41"是完全不同的,前者代表一個數,後者代表一個字串。為了傳送16進位制的資料,我的做法是建立一個const char型別的陣列,將需要傳送的資料存入該陣列中,然後在QByteArray的建構函式中呼叫,此時所得到的資料即要傳送的資料。
const char data[3]={0xF5,0x02,0xff};
QByteArray s(data);
// QString轉QByteArray方法
//Qt5.3.2
QString str("hello");
QByteArray bytes = str.toUtf8(); // QString轉QByteArray方法1
QString str("hello");
QByteArray bytes = str.toLatin1(); // QString轉QByteArray方法2
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
//QByteArray轉QString方法
//Qt5.3.2
QByteArray bytes ("hello world");
QString string = bytes; // QByteArray轉QString方法1
QByteArray bytes("hello world");
QString string;
string.prepend(bytes);// QByteArray轉QString方法2
qDebug() << string;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
QByteArray類同樣不以’\0’為結尾:如
QByteArray bytes;
bytes.resize(5);
bytes[0] = '1' ;
bytes[1] = '2';
bytes[2] = '3';
bytes[3] = '\0';
bytes[4] = 'a';
cout << bytes << endl;