如何以字节为单位获取UTF-16LE字符串的大小?

时间:2015-04-22 10:21:01

标签: c++ visual-c++

说我有以下内容:

wchar_t *str = L"Hello World!";

我希望以字节为单位获取L"Hello World!"的大小(而不是它包含的字符数)。

我已经读过wcslen()每2个字节计为1个字符,所以如果一个字符是4个字节,它会将它视为2个字符!

这对我很好,因为现在我可以这样做:

int size_of_str_in_bytes = wcslen(str) * 2;

但是保证wcslen()始终会这样吗?

1 个答案:

答案 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
}

live demo