2012-02-14 3 views
8

私はUnicodeスタイルの文字列としてstd :: wstringを使用しています。今度は、wstringのバイトサイズを にしたいと思います。 wstringのsize()メソッドを使用すると、文字列の合計数が私のwstringに だけ表示されます。バイトはsize()* 2でなければなりません。 このバイトサイズを取得する公式な方法はありますか?私のプログラムで size()* 2を使用したくない.....std :: wstringのバイトサイズを取得するにはどうすればよいですか?

私は最後のパラメータとしてRegSetValueExWで使いたいです。

答えて

13

str.size() * sizeof(wchar_t)または同等品を使用してください。

実際には、2バイトのwchar_tを持つWindows以外のプラットフォームはないとは思えませんが、4バイトがはるかに一般的です。

+0

RegSetValueExWを使用してREG_SZを設定している場合は、ヌルターミネータの文字も追加することをお勧めします。 '(str.size()+1)* sizeof(wchar_t)' – cloudshao

7

なぜ:

(str.size() * sizeof(wchar_t)) ; 

または:

(str.size() * sizeof(std::wstring::traits_type::char_type)) ; 
+0

'sizeof(char) 'は1であることが保証されているため、分割する必要はありません。 – Fanael

+0

はい、標準準拠のコンパイラでsizeof(char)== 1、私は私の答えを編集しました。 –

1
std::wstring s = L"Howdy, world!"; 
//... 
std::size_t bytes_count = s.size() * sizeof s[0]; 
関連する問題