如何获得以字节为单位的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"字符不包括!)
这与"将每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
}
(现场演示)
相关文章:
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 在C++中使用 UTF-8 字符串和字符
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- UTF-16LE 编码问题与 Qt 文本编辑器用 C++ 编写
- "iconv"从 UTF-32LE 转换为 UTF-16LE
- cpp 预处理器无法识别 UTF-32 字符串
- 如何解析 UTF-8 中文字符串
- 如何获得以字节为单位的UTF-16LE字符串的大小
- 在 VS 调试器中显示 UTF-16 字符串
- 将wchar_t*转换为UTF-16字符串
- 在空白字符上拆分 UTF-8 编码字符串,而无需了解 UTF-8 编码
- Linux控制台的国际UTF-32字符串输出
- 如何使用sqlite3_mprintf()与UTF-16字符串
- c++ UTF-8实际字符串长度
- 如何使用c++ 11语言环境工具来使用UTF-8作为字符串的内部表示
- 如何将ASCII保存为C/ c++ (cpp)中的Unicode (UTF-16LE)
- ICU可以直接在大端机器上对UTF-16LE数据进行排序比较吗?
- 从char*创建UTF-16字符串
- 处理std::wstring和std::string之间的UTF-8编码字符串
- 使用什么来存储Unicode (UTF-16)字符串?(c++ 11)