▲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);
相关推荐
1. **字符串创建与初始化**:QString可以通过字面量、字符数组、其他字符串或C风格的字符串进行初始化。例如,`QString str = "Hello, World!";` 或 `QString str2 = QLatin1String("你好,世界!");`。 2. **字符...
例如,如果你有一个整数`num = 12`,你可以用`QString str = QString::number(num)`将其转换为字符串。 然后,`rightJustified()`方法用于将字符串右对齐并填充指定的字符。它接受两个参数:一个是期望的总宽度,另...
转本文介绍了标准C/C++中的有关日期和时间的概念,并通过各种实例讲述了这些函数和...笔者认为,和时间相关的一些概念是相当重要的,理解这些概念是理解各种时间格式的转换的基础,更是应用这些函数和数据结构的基础。
这篇教程“05 QString字符串处理及中文乱码问题处理”显然会深入探讨如何在Qt应用中有效地管理和解决中文乱码问题。 首先,QString的构造和基本操作是其核心内容。你可以通过各种方式创建一个QString对象,比如直接...
TCHAR *类型转为QString类型:QString WcharToChar(const TCHAR* wp, size_t codePage = CP_A
使用`sprintf()`函数可以进行格式化的字符串输出,如`s5.sprintf("%s","Welcome to my world")`,这与C语言中的`printf`类似,允许我们将变量或文本插入到字符串中。 3. **字符串插入选项**: `insert()`函数可以...
你可以使用`QByteArray::fromHex()`或`QString::toLatin1()`方法将16进制字符串转换为字节序列,再通过`QByteArray::toInt()`将其转换为整数。 3. **转换为字符串**:将得到的十进制数值转换为16进制字符串。可以...
接着,我们创建了一个新的JSON对象,并添加了"name"和"age"字段,最后将其转换回JSON字符串并打印。 **6. 注意事项** 使用cJSON库时,要注意以下几点: - cJSON不检查内存溢出,确保有足够的内存分配。 - 解析后的...
当需要将QString转换为非Unicode(ASCII)字符串时,可以使用`toLocal8Bit()`函数,它返回一个QByteArray对象,然后可以将这个字节数组转换为char*。但是这种方法不适用于Unicode环境,因为它会丢失Unicode信息。 ...
在IT行业中,编程语言如C++和库如QT经常被用来处理各种数据操作,包括字符串的排序。在中文环境中,由于汉字的特性,拼音排序成为一种实用的需求,特别是在需要按照汉字拼音首字母来排列字符串的场景下。"汉字字符串...
5. **大小写转换**:`UpperCase`和`LowerCase`函数可以快速地将字符串转换为大写或小写。 6. **字符串比较**:`CompareText`函数可以忽略字符的大小写进行比较,`SameText`函数则判断两个字符串是否内容相同。 除此...
总结一下,QString与ASCII之间的转换是通过QString的`toUtf8()`方法将其转换为QByteArray,然后可以遍历该字节数组来处理ASCII字符。这个过程在处理包含ASCII字符的字符串时非常有用,尤其是在跨平台或与不同编码...
"QGBK.zip_QT转换字符串源码"这个压缩包显然包含了与QT库相关的字符串转换源代码,可能是一个小型的实用工具或者示例代码,用于帮助开发者处理字符串在不同编码格式间的转换,特别是针对GBK编码的情况。 首先,我们...
此为QString无损转char*和unsigned char* 。 当QString内容包含汉字时,转换char*等会发生...使用后char*与unsigned char*的qDebug()输出与QString输出结果相同。 注意,该函数返回unsigned char*使用完毕后记得delete。
总结来说,Qt提供了便捷的方法在QString、QByteArray、int和double之间进行转换,这在处理各种数据类型时非常有用。在实际编程中,根据需求选择合适的转换方式,并注意检查转换的正确性,以确保数据的准确无误。
在本文中,我们将深入探讨如何使用Qt框架来创建一个多功能字符串转换器,它不仅具有基本的字符串转换功能,还设计得易于扩展以适应未来的转换需求。这个转换器项目利用了Qt强大的C++库,提供了良好的代码组织和测试...
但如果需要,可以使用`QString::toUtf8()`将Unicode字符串转换为UTF-8字节序列。 5. **16进制数值转换**:在串口通信中,可能需要将接收到的16进制数值转换为字符或字符串。例如,函数`QByteArray_to_HexQString`将...
3. **格式化输出**:`QString::number()`函数用于将数值转换为字符串,并可指定基数(二进制、八进制、十进制、十六进制)、精度、填充字符等。 4. **字符串操作**:QString类提供了丰富的成员函数,如`append()`, ...