2012-02-14 15 views
8

Estoy usando std :: wstring como mi cadena de estilo Unicode. Ahora quiero obtener el tamaño de byte de un wstring. Si uso el método size() de wstring, obtengo el número total de caracteres en mi wstring. Pero el byte debe ser de tamaño() * 2. ¿Hay alguna manera oficial de obtener este tamaño de byte? No quiero usar size() * 2 en mi programa .....¿Cómo puedo obtener el tamaño de byte de std :: wstring?

Quiero usar en RegSetValueExW como último parámetro.

Respuesta

13

Use str.size() * sizeof(wchar_t) o un equivalente.

De hecho, no puedo pensar en ninguna otra plataforma además de Windows que tenga 2 bytes wchar_t, 4 bytes es mucho más común.

+0

Si está configurando un REG_SZ usando RegSetValueExW, también querrá agregar un carácter para el terminador nulo: '(str.size() + 1) * sizeof (wchar_t)' – cloudshao

7

Por qué no:

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

O:

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

'sizeof (char) 'se garantiza que es 1, no hay necesidad de dividir por él. – Fanael

+0

Sí, en cualquier compilador estándar compatible sizeof (char) == 1, edité mi respuesta. –

1
std::wstring s = L"Howdy, world!"; 
//... 
std::size_t bytes_count = s.size() * sizeof s[0]; 
Cuestiones relacionadas