一个unsigned char*字符是utf-8格式,怎么判断这个字符串有多长?
时间: 2024-10-16 07:19:20 浏览: 15
在UTF-8编码中,每个Unicode字符可以由1到4个字节表示。判断一个`unsigned char*`类型的UTF-8字符串长度需要遍历整个数组,并计算实际占用字节数。这里有一个简单的算法:
1. 初始化一个计数器 `length` 为0。
2. 遍历数组,直到遇到空字符('\0'),它标志着字符串结束。
a. 对于每一个字符(`char c = *p`):
- 如果它是第一个字节(最左侧的一位是1),那么这是一个单字节的ASCII字符,直接加1到长度。
- 如果它的最高三位是110、1110 或 11110,这意味着这是第一部分,接下来还有后续字节。你需要继续读取并累加,直到找到所有的字节为止。每增加一个字节,长度加1。
3. 当找到 `\0` 后,停止计数。
```cpp
int utf8StringLength(unsigned char* str) {
int length = 0;
while (str[length] != '\0') {
if ((str[length] & 0b11000000) == 0) { // ASCII字符
length++;
} else if (((str[length] & 0b11100000) == 0b11100000) || ((str[length] & 0b11110000) == 0b11110000) || ((str[length] & 0b11111000) == 0b11111000)) { // 标志着有后续字节
length++; // 每次遇到这样的字节都增加长度
while (((str[length] & 0b10000000) != 0) && (length < sizeof(str))) { // 继续检查直到找到完整的多字节序列
length++;
}
}
}
return length;
}
```
阅读全文