3

QStringをLPCSTRに変換するにはどうすればよいですか?

#ifdef UNICODEが定義されている場合と定義されていない場合、どうすればよいですか?

どうもありがとう :)

4

4 に答える 4

12

私は推測する:

QString str("ddddd");
LPCSTR lstr = str.toStdString().c_str();
于 2011-03-26T16:11:31.750 に答える
2

QString常に Unicode を保持できます。LPCSTRUnicode ではありません。これは、収まらない文字をどうするかを検討する必要があることを意味します。これは「どの方法を使用するか」の問題ではなく、設計上の問題です。

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.

于 2011-03-28T09:29:19.637 に答える
0

私はここから次の解決策を見つけました、そしてそれは私にとって完璧に機能します:

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());
}
于 2013-03-18T18:06:12.033 に答える
-6
LPCSTR == const char *

ユニコードじゃないなら

LPCSTR s = (const char *)qtString;

于 2011-03-26T16:08:43.477 に答える