5

vector<BYTE>文字列内の文字を表す があります。これらの文字を ASCII 文字として解釈し、Unicode (UTF-16) 文字列に格納したいと考えています。vector<BYTE>現在のコードは、 の文字が ASCII ではなく Unicode であることを前提としています。これは標準 ASCII では問題なく機能しますが、拡張 ASCII 文字では失敗します。これらの文字は、 経由で取得した現在のコード ページを使用して解釈する必要がありますGetACP()。これらの ASCII 文字を使用して Unicode (UTF-16) 文字列を作成するにはどうすればよいですか?

編集:解決策は、ここで説明されているマクロと関係があるはずだと思います: http://msdn.microsoft.com/en-us/library/87zae4a3(v=vs.80).aspx 正確にはわかりません実際の実装はどうなるか。

int ExtractByteArray(CATLString* pszResult, const CByteVector* pabData)
{
    // place the data into the output cstring
    pszResult->Empty();
    for(int iIndex = 0; iIndex < pabData->GetSize(); iIndex++)
        *pszResult += (TCHAR)pabData->GetAt(iIndex);

    return RC_SUCCESS;
}
4

3 に答える 3

4

その文字列をUnicodeに変換するには、 MultibyteToWideCharを使用する必要があります

于 2013-02-20T15:56:13.297 に答える
1

vector<BYTE>文字列内の文字を表すを持っています。これらの文字をASCII文字として解釈し、Unicode(UTF-16)文字列に格納したい

std::vector<BYTE>バイナリデータを使用している場合にのみ使用してください。文字列を操作するときは、std::string代わりに使用してください。このstd::stringオブジェクトには、1バイト以上のシーケンスによってエンコードされる特殊文字(したがって、マルチバイト文字と呼ばれます)が含まれますが、これらはASCII文字ではないことに注意してください。

を使用すると、 (マルチバイトUTF-8文字を含む)をUTF-16エンコードポイントを含むように変換する独自の関数を作成するためにstd::string使用できます。MultiByteToWideCharstd::stringstd::wstring

// multi byte to wide char:
std::wstring s2ws(const std::string& str)
{
    int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
    std::wstring wstrTo(size_needed, 0);
    MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
    return wstrTo;
}
于 2013-02-20T16:16:25.417 に答える
0

CStringMFCを使用しているので、仕事をしましょう。

于 2013-02-20T16:27:23.617 に答える