Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 有人知道下面的代码可能做什么吗?_C_Encoding_Utf 8 - Fatal编程技术网

C 有人知道下面的代码可能做什么吗?

C 有人知道下面的代码可能做什么吗?,c,encoding,utf-8,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

我打赌这和编码有关

但是它到底是如何工作的呢

更新

/* 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(strtree,cr,sizeof(结构规则项),str,j);
str+=j;
}
}   

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

最后64个字符比一个字节宽,长度为
2
6

用法如下:

        while (str < ptr)
        {
            j = mblen[(*str)];
            tree_nput(r->tree, cr, sizeof(struct rule_item), str, j);
            str += j;
        }
    }   
unsigned char current\u char=*mbstr;
对于(i=0;i<_mblen_table_utf8[当前字符];i++){
/*将*mbstr++视为当前字符的一部分*/
}

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

最后64个字符比一个字节宽,长度为
2
6

用法如下:

        while (str < ptr)
        {
            j = mblen[(*str)];
            tree_nput(r->tree, cr, sizeof(struct rule_item), str, j);
            str += j;
        }
    }   
unsigned char current\u char=*mbstr;
对于(i=0;i<_mblen_table_utf8[当前字符];i++){
/*将*mbstr++视为当前字符的一部分*/
}

没有任何进一步的细节,上面的代码就是这样做的:它声明一个静态无符号字符数组,并用花括号内的值初始化它。

没有任何进一步的细节,上面的代码正是这样做的:它声明一个静态无符号字符数组,并用花括号内的值对其进行初始化。

历史上,每个字符都是以7位(然后是8位)编码的,这足以对欧洲语言的字母表进行编码

只有前128个字符是每个人共有的,其余128个是通过代码页标准化的(例如)

由于需要对较长的字母表语言(如汉语)进行编码,因此每个字符都是按几个字节编码的

是一种以高效、可变代码长度的方式对Unicode字符进行编码的方法。这意味着您读取的第一个字节决定了字符字节序列的长度

基本上,您的表是一个查找表,用于检查从用作表索引的字节开始的字符有多少字节。您将看到此表的另一个版本及其说明

我添加了表索引作为注释,以使其更清晰:

unsigned char current_char = *mbstr;

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

历史上,每个字符都是以7位(然后是8位)编码的,这足以编码欧洲语言的字母表

只有前128个字符是每个人共有的,其余128个是通过代码页标准化的(例如)

由于需要对较长的字母表语言(如汉语)进行编码,因此每个字符都是按几个字节编码的

是一种以高效、可变代码长度的方式对Unicode字符进行编码的方法。这意味着您读取的第一个字节决定了字符字节序列的长度

基本上,您的表是一个查找表,用于检查从用作表索引的字节开始的字符有多少字节。您将看到此表的另一个版本及其说明

我添加了表索引作为注释,以使其更清晰:

unsigned char current_char = *mbstr;

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

该数组似乎是一个查找表,用于确定给定第一个字节的UTF-8字符中的字节数。基本上,第一个字节(作为无符号值)用作数组的索引,该索引处的元素给出UTF-8字符的字节序列长度

无效字节和中间序列字节似乎映射到此表中的1字节,因此,如果遇到不合适的情况,则使用此表的代码可能会将它们视为单个字符(除非它特别忽略它们)


这种表的一个用途是计算UTF-8字符串中的字符(不是字节,而是Unicode字符)。每次计算字符数时,都会查找长度并按字符字节序列的长度向前移动,而不是向前移动一个字节。。。只要从字符的开头开始,并且字符串始终是有效的UTF-8,它就可以正常工作。

该数组似乎是一个查找表,用于确定给定第一个字节的UTF-8字符中的字节数。基本上,第一个字节(作为无符号值)用作数组的索引,该索引处的元素给出UTF-8字符的字节序列长度

无效字节和中间序列字节似乎映射到此表中的1字节,因此,如果遇到不合适的情况,则使用此表的代码可能会将它们视为单个字符(除非它特别忽略它们)


这种表的一个用途是计算UTF-8字符串中的字符(不是字节,而是Unicode字符)。每次计算字符数时,都会查找长度并按字符字节序列的长度向前移动,而不是向前移动一个字节。。。只要从字符的开头开始,并且字符串始终是有效的UTF-8,它就可以正常工作。

I什么上下文?这只是一个数组的声明。它实际上没什么用处。你还应该找到并发布使用_mblen_table_utf8的代码。这是一个相当粗糙且不正确的UTF-8多字节字符长度表,但只要输入数据格式正确,它就应该工作。(至于错在哪里,表中C0和C1字节被错误地编码为2字节字符起始字节。5字节和6字节的字节也错了。UTF-8最多是4字节对应一个字符。)@R,似乎C0和C1字节实际上是2字节字符起始字节,根据,你认为有什么不对?请给我看一个以C0或C1开头的字符。不存在。我需要什么背景?这只是一个数组的声明。它实际上没有什么作用。你还应该找到并发布使用_mblen_table_utf8的代码。这是一个相当粗糙和不正确的U表