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

How to get the size of a UTF-16LE string in bytes?

本文关键字:UTF-16LE 字符串 为单位 何获得 字节      更新时间:2023-10-16

假设我有以下内容:

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"字符不包括!)

这与"将每2个字节计数为1个字符">不同,尽管对于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
}

(现场演示)