#include <iostream>
using namespace std;
int getStrLenUtf8(const char* str)
{
if (!str) return 0;
int len = (int)strlen(str);
int ret = 0;
for (const char* sptr = str; (sptr - str) < len && *sptr;)
{
unsigned char ch = (unsigned char)(*sptr);
if (ch < 0x80)
{
sptr++; // ascii
ret++;
}
else if (ch < 0xc0)
{
sptr++; // invalid char
}
else if (ch < 0xe0)
{
sptr += 2;
ret++;
}
else if (ch < 0xf0)
{
sptr += 3;
ret++;
}
else
{
// 统一4个字节
sptr += 4;
ret++;
}
}
return ret;
}
//计算含有汉字的字符串的长度,汉字作为一个字符处理,已知:汉字编码为双字节,其中首字节<0,尾字节在0-63以外。
int gbkStrlen(const char* str)
{
const char* p = str;
while (*p)
{
if (*p < 0 && (*(p + 1) < 0 || *(p + 1) > 63))
{
str++; //str 移动一位,p移动两位,因此长度加1
p += 2;
}
else
{
p++; //str 不动,p移动一位 长度加1
}
}
return p - str;
}
int main()
{
char* str = "我司12sdfsd";
cout << getStrLenUtf8(str) << endl;
system("pause");
return 0;
}
c计算utf8字符串的长度,中文算一个字符
最新推荐文章于 2023-05-15 09:05:27 发布