wchar_t到QString的转换方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wchar_t到QString的转换方法?相关的知识,希望对你有一定的参考价值。

我在一个数据库程序中文件存档使用的是wchar_t数组,但是Qt中要用的QString类型该怎么跟;这个wchar_t数组互相转换呢?

参考技术A 先定义一个wchar_t数组,然后随便定义一个QString :
QString ans;
ans.toWcharArray(wchar_t *a);
就可以了本回答被提问者采纳

wchar_t到unsigned char转换

我有一个代码实现以下内容:

unsigned char charStr; //this var can only take a value either 0, 1, or 2
WCHAR wcharStr;
...
charStr = wcharStr - '0';
...

我知道在从Unicode(wchar_t数据类型)转换为ANSI(unsigned char)时可能会丢失一些数据(从16位到8位)。但是,有人可以解释为什么减去'0'使这种转换正确吗?

答案

C和C ++语言标准要求从09的数字编码是连续的。因此,减去'4' - '0',例如,将获得4

wchar_t实际上并不需要这样,但在现实世界中,您的编译器会将其映射到Unicode,Windows上为UTF-16,其他地方为UCS-4。 Unicode的前128个代码点与ASCII相同。您没有在使用非ASCII字符集的现代真实编译器上编译此代码(IBM的Z系列大型机,为了向后兼容而默认为代码页1047),因此您的编译器会转换您的wchar_tchar一些整数类型,可能是32位宽,减去并获得一个数字值。然后它将它存储在unsigned char类型的变量中,这是一个错误,因为它实际上是一个不可打印的控制字符的ASCII值。

此代码不正确。如果你想从wchar_t转换为char,你应该使用STL的codecvt或C标准库中的wcrtomb()。当且仅当可能时,还有一个wctob()转换为单个字节。在使用之前设置您的语言环境。

如果你确定你的wchar_t拥有Unicode,你的unsigned char持有Latin-1,并且你的值在范围内,但是,你可以简单地将wchar_t值转换为(unsigned char)。另一种方法,如果你知道你有一个数字,就是写(charStr - L'0') + '0'

以上是关于wchar_t到QString的转换方法?的主要内容,如果未能解决你的问题,请参考以下文章

将 int 转换为 wchar_t 的正确方法是啥?

Qt中Qstring,char,int,QByteArray之间到转换(转)

QString转wchar_t*

string与QString之间的转换(两种方法:fromStdString直接转换,或者fromLocal8Bit(cstr.c_str())

QString类型转换

Qt中int转换为QString的方法