如何将QString转换为LPCSTR?
如果定义了#ifdef UNICODE,那么我该怎么办?
非常感谢:)
答案 0 :(得分:10)
我想:
QString str("ddddd");
LPCSTR lstr = str.toStdString().c_str();
答案 1 :(得分:2)
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
。
答案 2 :(得分:0)
我从here找到了以下解决方案,它对我来说完美无缺:
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());
}
答案 3 :(得分:-5)
LPCSTR == const char *
它不是unicode,然后
LPCSTR s =(const char *)qtString;