c - 有没有人知道以下代码可能做什么?

标签 c encoding utf-8

/* utf-8: 0xc0, 0xe0, 0xf0, 0xf8, 0xfc */
static unsigned char _mblen_table_utf8[] = 
{
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1
};

我打赌它与编码有关,

但它究竟是如何工作的呢?

更新

        while (str < ptr)
        {
            j = mblen[(*str)];
            tree_nput(r->tree, cr, sizeof(struct rule_item), str, j);
            str += j;
        }
    }   

最佳答案

由于多字节字符串中的一个字符具有可变长度,因此该表将每个字符映射到一个长度。

最后 64 个字符的宽度大于一个字节,长度为 26

用法是这样的:

unsigned char current_char = *mbstr;

for (i = 0; i < _mblen_table_utf8[current_char]; i++) {
  /* treat *mbstr++ as a part of the current character */
}

关于c - 有没有人知道以下代码可能做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7702269/

相关文章:

java - 使用 Java 编写不同字符编码的 XML

ruby - 应用程序路径中的 rake 和 utf-8 字符

android - Android Gradle错误-类常量池中的UTF8字符串非法

python - 如何在 python 中左对齐 UTF-8 编码的字符串?

python - 将多个参数传递给函数的最有效方法?

c - c 中的运算符和优先级

C# mvc2 编码 url

java - PHP 和 Clojure (Java) 代码之间的原始 MD5 base64 编码字符串对于某些字符的不同结果

c - 如何编写多个从属 i2c 客户端设备驱动程序?

c - 文件处理程序中不需要的输出(连接文件)