说我有以下内容:
wchar_t *str = L"Hello World!";
我希望以字节为单位获取L"Hello World!"
的大小(而不是它包含的字符数)。
我已经读过wcslen()
每2个字节计为1个字符,所以如果一个字符是4个字节,它会将它视为2个字符!
这对我很好,因为现在我可以这样做:
int size_of_str_in_bytes = wcslen(str) * 2;
但是保证wcslen()
始终会这样吗?
答案 0 :(得分:1)
好吧,wcslen
总是会为您提供wchar_t
的数量。它是strlen
的类似物。
(请注意,就像strlen
一样,终止" null"字符不包含!)
这与"将每2个字节计为1个字符" 不完全相同,但对于wchar_t
为2个字节宽的系统,效果会一样。
但我会使用sizeof(wchar_t)
代替2
。 Y'知道,为了便携性和所有这些。
例如,Coliru的平台有sizeof(wchar_t) == 4
:
#include <cwchar>
#include <cassert>
int main()
{
const wchar_t* wstr = L"Hello world";
const size_t size_of_wide_cstr_in_bytes = wcslen(wstr) * sizeof(wchar_t);
assert(sizeof(wchar_t) == 4); // on this particular system
assert(size_of_wide_cstr_in_bytes == 44); // on this particular system
}