Qt中QString轉換成const char * ()、QByteArray等方法

在Qt下寫串口字符串讀寫方面的程序,裏面需要處理一些QString和字符數組等方面的字符處理。

QString:

QString類提供Unicode字符串。

QString存儲一個16位QChars字符串,其中每個QChar對應一個Unicode 4.0字符。(代碼值大於65535的Unicode字符使用代理項對(即兩個連續的QChars)存儲。)

Unicode是一個國際標準,它支持目前使用的大多數書寫系統。它是US-ASCII(ANSI X3.4-1986)和Latin-1(ISO 8859-1)的超集,所有US-ASCII/Latin-1字符都位於相同的代碼位置。

在幕後,QString使用隱式共享(寫時複製)來減少內存使用並避免不必要的數據複製。這也有助於減少存儲16位字符而不是8位字符的固有開銷。

除了QString,Qt還提供QByteArray類來存儲原始字節和傳統的以8位“\0”結尾的字符串。在大多數情況下,QString是您要使用的類。它在整個Qt API中使用,Unicode支持確保瞭如果您希望在某個時候擴展應用程序的市場,應用程序將易於翻譯。QByteArray適用的兩種主要情況是需要存儲原始二進制數據時,以及內存保護非常重要時(如在嵌入式系統中)。

QString str = "Hello";

QString str;

str.resize(4);
str[0] = QChar('U');
str[1] = QChar('n');
str[2] = QChar(0x10e3);
str[3] = QChar(0x03a3);

QByteArray:

QByteArray類提供字節數組。

QByteArray可用於存儲原始字節(包括“\0”)和傳統的以8位“\0”結尾的字符串。使用QByteArray比使用const char*方便得多。在後臺,它總是確保數據後面跟着一個“\0”終止符,並使用隱式共享(寫時複製)來減少內存使用並避免不必要的數據複製。

除了QByteArray,Qt還提供QString類來存儲字符串數據。在大多數情況下,QString是您要使用的類。它存儲16位Unicode字符,使您可以輕鬆地在應用程序中存儲非ASCII/非拉丁-1字符。此外,QString在Qt API中貫穿始終。QByteArray適用的兩種主要情況是需要存儲原始二進制數據時,以及內存保護非常重要時(例如,對於嵌入式Linux,使用Qt)。

例如:

QByteArray ba("Hello");

QByteArray ba;

    ba.resize(5);

    ba[0] = 0x3c;

    ba[1] = 0xb8;

    ba[2] = 0x64;

    ba[3] = 0x18;

    ba[4] = 0xca;

 

那麼兩者之間的轉換呢?

以下的方法都是從網上搜索和幫助文檔中獲得;

//常用參數類型:char *字符串, QByteArray字符數組, QString字符串
//需要轉換:char * ---轉---  QByteArray  ---需要調用QByteArray類的構造函數
char*     --------------QByteArray(const char*)-----------> QByteArray
char* str;
QByteArray byte(str);

char*     --------------QString(const char*)-------------->QString
char* str;
QString string(str);

QByteArray   -------------data()-------------------->char*
QByteArray byte;
char* str = byte.data();

QByteArray  ------------QString()------------------->QString
QByteArray byte;
QString string(byte);

QString  --------------toAscii()--------------------> QByteArray
QString string;
QByteArray byte = string.toAscii();

QString -------------qPrintable()------------------>char*
QString string;
char* str = qPrintable(string);

 

例如項目中使用的:

char *msg;
QString Buffer = "ab-cd-ef-gh";
unsigned char BufAddr[9];
QByteArray ba = Buffer .toLatin1();
msg = ba.data();

int i=0;
while (*msg) {
        if(*msg != '-')
        {
            BufAddr[i] = *msg;
            i++;
            ++msg;
        }
        else
        {
            ++msg;
        }
    }

 

其中:toLatin1、toLocal8Bit都是QString轉QByteArray的方法,Latin1代表ASCII,Local8Bit代表unicode。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章