【发布时间】:2014-04-14 03:33:53
【问题描述】:
谁能解释一下为什么第一个功能有效,而第二个无效?
unsigned int utf8_count(char* in)
{
unsigned int i = 0, c = 0;
while (in[i])
{
if ((in[i] & 0xc0) != 0x80)
c++;
i++;
}
return c;
}
unsigned int utf8_count(char* in, unsigned int in_size)
{
unsigned int i = 0, c = 0;
while (i < in_size)
{
if ((in[i] & 0xc0) != 0x80)
c++;
i++;
}
return c;
}
我了解(in[i] & 0xc0) != 0x80 的作用,但我不明白为什么i < in_size != in[i]?
示例字符串:ゴールデンタイムラバー/スキマスイッチ 57 个字节,19 个字符。
为什么utf8_count(in, 57) 返回 57 而不是 19?
示例字符串的二进制表示:
【问题讨论】:
-
你在为
in_size传递什么?如果传入strlen(in),这两个函数是等价的。 -
我以字节为单位传递大小。为什么 strlen 以字符返回大小?
-
例如:
ゴールデンタイムラバー/スキマスイッチ是 57 个字节或 19 个字符。 -
@Luka - 没有现成的函数可以返回这个计数吗?您使用的是什么编译器和操作系统?
-
strlen在您的示例字符串中应返回 57(或 59,无论字节长度如何),not 19。这个名称有点用词不当。它不知道 UTF8 或任何其他编码;它只是在遇到零值之前计算非零char值(通常 = 字节)的数量。