![](/img/trans.png)
[英]How to convert QString in Qt5 to LPCSTR in Visual Studio 2013
[英]How to convert QString to LPCSTR (Unicode)
如何将QString转换为LPCSTR?
定义#ifdef UNICODE时(未定义)如何处理?
非常感谢 :)
我猜:
QString str("ddddd");
LPCSTR lstr = str.toStdString().c_str();
QString
可以始终保留Unicode; LPCSTR
绝不是Unicode。 这意味着您必须考虑如何处理不合适的字符。 这不是一个“使用哪种方法”的问题,而是一个设计问题。
在您的特定情况下,您很有可能完全知道QString
仅包含本地“ ANSI”代码页(也称为ACP
)中的字符。 在这种情况下,正确的函数是QString::toLocal8Bit ()
。
另外,您可能知道QString
仅包含Latin1(ISO 8859-1)中的字符。 在这种情况下,正确的函数是QString::toLatin1()
。
您可以尝试调用QString::toUtf8()
。 即使QString
包含所有Unicode字符,这也将始终产生有效的字节数组。 但是,形式上您不能指向LPCSTR
:UTF-8不是有效的ACP
代码页。 并且大概是您希望此LPCSTR
传递到您控制范围之外的另一个函数。 该功能可能不会使用UTF-8。 如果完全希望使用Unicode,则需要使用LPCWSTR
。
我从这里找到以下解决方案,它对我而言毫无瑕疵:
void fooSub(LPSTSTR X); // this is our function :-)
foo()
{
QString text;
if(sizeof(TCHAR) == 1)
fooSub((LPCSTR)text.toLocal8Bit().constData()); // here you have to check, how to convert, you could also use utf8(), ...
else
fooSub((LPCWSTR)text.utf16());
}
LPCSTR == const char *
那不是unicode,那么
LPCSTR s =(const char *)qtString;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.