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; } }


【Qt中QString转换成const char * ()、QByteArray等方法】其中:toLatin1、toLocal8Bit都是QString转QByteArray的方法,Latin1代表ASCII,Local8Bit代表unicode。

    推荐阅读