【发布时间】:2011-08-14 16:19:59
【问题描述】:
我有一个简单的问题:
有没有办法在以零结尾的char16_t 数组中进行类似strlen() 的字符计数?
【问题讨论】:
我有一个简单的问题:
有没有办法在以零结尾的char16_t 数组中进行类似strlen() 的字符计数?
【问题讨论】:
使用指针:),创建一个指向起点的重复指针,然后循环遍历它while (*endptr++);,然后长度由endptr - startptr 给出。您实际上可以对此进行模板化,但是,编译可能不会生成与 strlen 相同的内部代码(对于不同大小的 c)。
【讨论】:
REP SCAS 之类的汇编级别的东西快,但这就是内在的;)有关于基于 sse 的版本的文章(gcc 甚至有一些它使用的变体),但是这会限制您的硬件
char_traits<> 从那时起就一直存在。使用它们!
使用
char_traits<char16_t>::length(your_pointer)
参见 C++11-Std 的 21.2.3.2 struct char_traits<char16_t> 和 table 62。
【讨论】:
Necrolis answer 在长度中包含 NULL 字节,这可能不是您想要的。 strlen() 不在长度中包含 NULL 字节。
调整他们的答案:
static size_t char16len(uint16_t *startptr)
{
uint16_t *endptr = startptr;
while (*endptr) {
endptr++;
}
return endptr - startptr;
}
我意识到有一个公认的 C++ 答案,但这个答案对于使用 C 偶然发现这篇文章的任何人都很有用(就像我一样)。
【讨论】: