如何以字节为单位获取 UTF-16LE 字符串的大小?
How to get the size of a UTF-16LE string in bytes?
假设我有以下内容:
wchar_t *str = L"Hello World!";
我想获取 L"Hello World!"
的大小(以字节为单位)(而不是它包含多少个字符)。
我看过wcslen()
每2个字节算1个字符,所以如果一个字符是4个字节,它会把它当作2个字符!
这对我来说很棒,因为现在我可以做到:
int size_of_str_in_bytes = wcslen(str) * 2;
但是可以保证 wcslen()
会一直这样吗?
嗯,wcslen
总是给你 wchar_t
的数量。它类似于 strlen
。
(请注意,与 strlen
一样,终止符 "null" 不包含!)
这与 "counting every 2 bytes as 1 character" 不太一样,但对于 wchar_t
为 2 字节宽的系统,效果是相同的。
不过,我会使用 sizeof(wchar_t)
而不是 2
。你知道,为了便携性和所有这些。
比如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
}
(live demo)
假设我有以下内容:
wchar_t *str = L"Hello World!";
我想获取 L"Hello World!"
的大小(以字节为单位)(而不是它包含多少个字符)。
我看过wcslen()
每2个字节算1个字符,所以如果一个字符是4个字节,它会把它当作2个字符!
这对我来说很棒,因为现在我可以做到:
int size_of_str_in_bytes = wcslen(str) * 2;
但是可以保证 wcslen()
会一直这样吗?
嗯,wcslen
总是给你 wchar_t
的数量。它类似于 strlen
。
(请注意,与 strlen
一样,终止符 "null" 不包含!)
这与 "counting every 2 bytes as 1 character" 不太一样,但对于 wchar_t
为 2 字节宽的系统,效果是相同的。
不过,我会使用 sizeof(wchar_t)
而不是 2
。你知道,为了便携性和所有这些。
比如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
}