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。

发布了11 篇原创文章 · 获赞 10 · 访问量 5701

猜你喜欢

转载自blog.csdn.net/bxlover007/article/details/105223706