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 *
ユニコードじゃないなら
LPCSTR s = (const char *)qtString;