正如问题所说:
typedef __CHAR16_TYPE__ char16_t;
int main(void)
{
static char16_t test[] = u"Hello World!\n";
printf("Length = %d", strlen(test)); // strlen equivalent for char16_t ???
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我搜索并发现只有C++解决方案.
我的编译器是GCC 4.7.
编辑:
为了澄清,我正在寻找一个能够返回计数的解决方案code points,而不是计数characters.
对于UTF-16包含字符外的字符串,这两个字符串完全不同BMP.
这是你的基本力量:
int strlen16(const char16_t* strarg)
{
int count = 0;
if(!strarg)
return -1; //strarg is NULL pointer
char16_t* str = strarg;
while(*str)
{
count++;
str++;
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
这是一个更有效和更受欢迎的 strlen:
int strlen16(const char16_t* strarg)
{
if(!strarg)
return -1; //strarg is NULL pointer
char16_t* str = strarg;
for(;*str;++str)
; // empty body
return str-strarg;
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
警告:这在计算 UTF-16 字符串的字符(不是代码点)时无法正常工作。当__STDC_UTF_16__定义为时尤其如此1。
UTF-16 是可变长度的(BMP 中每个字符 2 个字节或 BMP 之外每个字符 4 个字节)并且这些函数不涵盖。
std::char_traits有这个。
#include <string>
std::char_traits<char16_t>::length(yourchar16pointerhere);
Run Code Online (Sandbox Code Playgroud)