2012-02-14 38 views
8

Tôi đang sử dụng std :: wstring làm chuỗi kiểu Unicode. Bây giờ tôi muốn lấy kích thước byte của một chuỗi. Nếu tôi sử dụng phương thức xâu chuỗi(), tôi chỉ nhận được tổng số ký tự là trong wstring của tôi. Nhưng byte phải là kích thước() * 2. Có cách nào chính thức để nhận kích thước byte này không? Tôi không muốn sử dụng kích thước () * 2 trong chương trình của mình .....Làm thế nào tôi có thể nhận được kích thước byte của std :: wstring?

Tôi muốn sử dụng trong RegSetValueExW làm tham số cuối cùng.

Trả lời

13

Sử dụng str.size() * sizeof(wchar_t) hoặc tương đương.

Trong thực tế, tôi không thể nghĩ ra bất kỳ nền tảng nào khác ngoài Windows có 2 byte wchar_t, 4 byte phổ biến hơn nhiều.

+0

Nếu bạn đang thiết lập REG_SZ bằng RegSetValueExW, bạn cũng sẽ muốn thêm một ký tự cho dấu kết thúc null: '(str.size() + 1) * sizeof (wchar_t)' – cloudshao

7

Tại sao không:

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

Hoặc:

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

'sizeof (char) 'được đảm bảo là 1, không cần chia cho nó. – Fanael

+0

Có trong bất kỳ kích thước trình biên dịch tuân thủ tiêu chuẩn nào (char) == 1, tôi đã chỉnh sửa câu trả lời của mình. –

1
std::wstring s = L"Howdy, world!"; 
//... 
std::size_t bytes_count = s.size() * sizeof s[0]; 
Các vấn đề liên quan