1. 程式人生 > >《Qt資料型別》--基本資料型別QByteArray,QString,char,byte之間的轉換

《Qt資料型別》--基本資料型別QByteArray,QString,char,byte之間的轉換

在上位機通訊中,根據通訊協議,有時候需要傳送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;