21

I am using std::wstring as my Unicode style string. Now I want to get the byte size of a wstring. If I use size() method of wstring, I just get the total number of chars in my wstring. But the byte should be size() * 2. Is there an official way to get this byte size? I don't want to use size() * 2 in my program.....

I want to use in RegSetValueExW as last parameter.

Guy Avraham
  • 3,482
  • 3
  • 38
  • 50
Hooch
  • 28,817
  • 29
  • 102
  • 161

4 Answers4

24

Use str.size() * sizeof(wchar_t) or equivalent.

In fact, I can't think of any other platform besides Windows that has 2-byte wchar_t, 4 bytes is far more common.

Dietrich Epp
  • 205,541
  • 37
  • 345
  • 415
  • 4
    If you're setting a REG_SZ using RegSetValueExW, you'll want to also add a character for the null terminator: `(str.size() + 1) * sizeof(wchar_t)` – pancakes Sep 05 '17 at 02:43
9

Why not :

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

Or :

( str.size() * sizeof(std::wstring::traits_type::char_type) ) ;
Ghassen Hamrouni
  • 3,138
  • 2
  • 20
  • 31
3
std::wstring s = L"Howdy, world!";
//...
std::size_t bytes_count = s.size() * sizeof s[0];
zdf
  • 4,382
  • 3
  • 18
  • 29
-3

You can use wcslen function

MSDN link: http://msdn.microsoft.com/en-us/library/78zh94ax.aspx

Linux: http://linux.die.net/man/3/wcslen

Yodo
  • 148
  • 1
  • 5
  • That returns number of chars, not the number of bytes, and requires a C-Style pointer, not a std::w/string. – paulm Dec 05 '12 at 16:31