3

テキスト バッファとして std::string を使用しています。次に、そのバッファーに含まれるデータが UTF-16 (つまり、実際には std::wstring) であると確信しています。std::string を std::wstring に強制するにはどうすればよいですか? std::string は誤称です。データは実際には wstring です。

4

2 に答える 2

5

std::vector<char>の代わりにを使用することを検討してくださいstd::string。「連続した一連のバイト」が必要な場合は、これが正しいコンテナーです。

ソース コンテナーを使用するstd::vectorと、データを再解釈するだけでよい (つまり、バイトを のシーケンスであるかのように扱いたいだけである) と仮定すると、コードはかなり単純になりますwchar_t

std::vector<char> v = get_my_wstring_character_data();
if (v.size() % sizeof (wchar_t) != 0)
    throw std::runtime_error("Invalid wstring length");

std::wstring ws(reinterpret_cast<wchar_t*>(&v[0]), 
                reinterpret_cast<wchar_t*>(&v[0] + v.size()));

ソースが の場合、使用している の実装がその文字を連続して格納するstd::stringことを保証できる場合、この同じアプローチが機能します。std::string実際には、これは常に当てはまります。

于 2011-03-26T04:23:47.453 に答える
1

std::wstringバイト配列を UTF-16 として保存/解釈するという保証はありません(ただし、Windows では発生します)。この質問をチェックしてください: std::wstring VS std::string

std::wstringしたがって、アプリケーションが MSVC でのみコンパイルされることが確実でない限り、UTF-16 でエンコードされたバイト配列からを構築するという考えを再考することをお勧めします。

于 2011-03-26T04:24:39.677 に答える