▲QString与char *的相互转化
QString str1 = "Test";
QByteArray ba = str1.toLatin1();
const char *c_str2 = ba.data();
printf("str2: %s", c_str2);
QString string = QString(QLatin1String(c_str2)) ;
或者
//中文Windows的缺省内码是GBK
// ASCII、GB2312、GBK到GB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容(更准确地说,是与
// ISO-8859-1兼容),与GB码不兼容。例如“汉”字的Unicode编码是6C49,而GB码是BABA。
#define G2U(s) ( QTextCodec::codecForName("GBK")->toUnicode(s) )
#define U2G(s) ( QTextCodec::codecForName("GBK")->fromUnicode(s) )
QString str;
QCString cstr;
str = G2U("中文输入");
cstr = U2G(str);
▲qstring ->std::string
qstring::toStdString() ,qstring::toStdWString()
▲ BSTR<->qstring
typedef WCHAR OLECHAR; typedef OLECHAR *BSTR;
BSTR(Basic STRing,Basic字符串)是一个OLECHAR*类型的Unicode字符串。它被描述成一个与自动化相兼容的类型。由于操作系统提供相应的API函数(如SysAllocString)来管理它以及一些默认的调度代码,因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。LPSTR被定义成是一个指向以NULL(‘\0’)结尾的8位ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。
BSTR bstr_str;
qstring q_str((QChar*)bstr_str, wcslen(bstr_str))
bstr_str = SysAllocString(q_str.utf16())
▲ qstring<->LPCSTR
qstring::toLocal8Bit().constData()
QString fromLocal8Bit ( const char * str, int size = -1 )
▲ qstring<->LPCWSTR
qstring::utf16()
QString fromUtf16 ( const ushort * unicode, int size = -1 )
▲ qstring<->CString
CString c_str(qstring::utf16())
QString fromUtf16 (LPCTSTR(c_str) )
CString cstr1 = "ASDDSD";
int strLength = cstr1.GetLength() + 1;
char *pValue = new char[strLength];
strncpy(pValue, cstr1, strLength);
以下引用的一个例子告诉我在不同的字符集字符串表示的不同
CString m_message("Hello!");
char szBuffer[4096];
memcpy( szBuffer, m_message, m_message.GetLength() );
发现输出szBuffer 的结果是"H",匪夷所思。
然后试了试常用的CString TO char的其他手段。
CString m_message("Hello!");
char *szBuffer = m_message.GetBuffer( m_message.GetLength() );
结果szBuffer指向"H"。
这就是说用CString给char赋值,是直接把第一个给char么?
答案出乎人意料,可以说是的,参阅《windows程序设计第5版》中的Unicode简介,可以得出这个结论。'H'的Unicode表示是一个双字节值0x0048。然而,因为Intel微处理器从最小的字节开始储存多字节数值,该字节实际上是以0x48、0x00的顺序保存在内存中。
字符串"Hello!"的Unicode表示为:
0x0048 0x0065 0x006C 0x006C 0x006F 0x0021
它在计算机里的存储为:
48 00 65 00 6C 00 6C 00 6F 00 21 00
这就是说当他传递给char时,赋值时读到第二个字节00时就会当作'\0'截断掉后面的数据了。所以CString“Hello!”赋值给char字符串当然是“H”了。
可是当使用VC6.0时这个问题却不存在。那是因为VC6.0默认使用的字符集是ANSI编码,而VS2008默认使用的是多字节字符集。这个可以在项目->工程属性->常规->字符集里设置。
若改成多字节字符集,上述代码就没问题了。
当然也可以不改字符集来解决这个代码。在字符串类中,有如下对应关系:
字符串类 字符集 赋值函数
CStringA char strcpy
CStringW WCHAR wcscpy
CString _TCHAR _tcscpy
#ifdef _UNICODE
typedef wchar_t TCHAR ;
#else
typedef char TCHAR;
#endif
CStringA是任何字符集设置下都是用多字节字符集,CStirngW是任何设置下都是用宽字符集(Unicode),CString就是视编译器设置而定。故可以这么修改代码:
CStringA m_message("Hello!");
char szBuffer[4096];
strcpy( szBufer, m_message);
相关推荐
TCHAR *类型转为QString类型:QString WcharToChar(const TCHAR* wp, size_t codePage = CP_A
转本文介绍了标准C/C++中的有关日期和时间的概念,并通过各种实例讲述了这些函数和...笔者认为,和时间相关的一些概念是相当重要的,理解这些概念是理解各种时间格式的转换的基础,更是应用这些函数和数据结构的基础。
此为QString无损转char*和unsigned char* 。 当QString内容包含汉字时,转换char*等会发生...使用后char*与unsigned char*的qDebug()输出与QString输出结果相同。 注意,该函数返回unsigned char*使用完毕后记得delete。
在Qt下写串口字符串读写方面的程序,里面需要处理一些QString和字符数组等方面的字符处理。 QString: QString类提供Unicode字符串。 QString存储一个16位QChars字符串,其中每个QChar对应一个Unicode 4.0字符。...
包括字符串比较、字符大小写转换、OEM(Dos)和ANSI(Windows)互换、查找、替换、删除子串、删除字符、格式化、子串剪裁、字节字符串处理、整数和字符串互换等等许多有用的函数 包含一个机器翻译的声明文件
toUpper() 将字符串的字母全部转换为大写字母 toLower() 将字符串的字母全部转换为大写字母 left() 返回包含字符串中最左n个字符的子字符串。如果n大于或等于size()或小于零,则返回整个字符串。 right() 返回包含...
可以获取textEdit上的QString类型16进制数转换为ByteArray; 输入数据错误判断及提示; CRC16校验计算公式; 计算ByteArray的crc16结果; 结果转换为QString,并且每两位数据都需要增加空格展示; 输入清除功能; ...
主要介绍了json 字符串之间的相互转换 ,通过eval()函数可以将JSON字符串转化为对象,本需要的朋友可以参考下
Qt5开发及实例,实例CH1502,测试字符串转换为全小写字符的功能。 (1)建立单元测试框架(操作方法同前),具体设置如下。 项目名称:TestQString。 测试类名:TestQString。 测试槽:testToLower。 生成源文件:tst_...
infer类的对象在初始化时按行读取规则,使用QFile的readLine()函数,将每条规则转化为一个QString字符串并存入QVector容器中,提供给后去函数进行处理。知识库格式如图: - 不懂运行,下载完可以私聊问,可远程教学 ...
\13.2.5 字符串的转换 338 \13.3 QVariant 339 \13.4 Qt的算法 341 \13.5 正则表达式 342 \13.5.1 基本的正则表达式 342 \13.5.2 文字捕获 344 \13.6 小结 345 \高 级 篇 \第14章 XML 348 \14.1 DOM 348 \14.1.1 DOM...
\13.2.5 字符串的转换 338 \13.3 QVariant 339 \13.4 Qt的算法 341 \13.5 正则表达式 342 \13.5.1 基本的正则表达式 342 \13.5.2 文字捕获 344 \13.6 小结 345 \高 级 篇 \第14章 XML 348 \14.1 DOM 348 \...
加入的这个函数的作用就是移除字符串开头和结尾的空白字符。 12.最后,如果输入错误了,重新回到登录对话框时,我们希望可以使用户名和 密码框清空并且光标自动跳转到用户名输入框,最终的登录按钮的单击事件的槽 ...