在标准中,“初始移位状态”一词经常被引用,似乎在各种情况下也是如此,例如多字节字符(字符串)和文件。但是该标准没有解释确切的含义。
那是什么?那么什么是一般的“转变”?
也:
因为这个词对我来说似乎是在不同的上下文中使用的(在字符上下文中,在字符串上下文中以及在文件上下文中),所以我将指出标准中的一些文本短语(尤其是ISO) / IEC:9899/2018(C18)),其中包含“初始换挡状态”:
§5.2.1.2-多字节字符
-多字节字符集可能具有与状态有关的编码,其中每个多字节字符序列均以初始移位状态开始,并在遇到特定的多字节字符时进入其他特定于语言环境的移位状态。顺序。
-标识符,注释,字符串文字,字符常量或标题名称应以初始移位状态开始和结束。
§7.21.3-文件
“-文件不必以初始移位状态。 .274)”
“ 274)与fseek(file,0,SEEK_END)一样,将文件位置指示符设置为文件末尾时,对于二进制流(由于可能带有尾随空字符)或任何具有状态的流,都具有未定义的行为依赖的编码,不能确保以初始移位状态结束。”
§7.21.6.2-fscanf函数
对于
s
转换说明符:“如果存在l长度修饰符,则输入应为从初始移位状态开始的多字节字符序列。”
"
是格式字符串的开头还是结尾?谢谢。
答案 0 :(得分:1)
移位状态是指通知某些字节序列为字符的状态,这取决于编码。
来自https://www.gnu.org/software/libc/manual/html_node/Shift-State.html
在某些多字节字符代码中,任何特定字节的含义 顺序不固定;这取决于其他顺序 早先在同一字符串中。通常只有几个序列 可以改变其他顺序的含义;这几个叫做 移位序列,我们说它们为其他设置移位状态 随后的顺序。
为说明变速状态和变速顺序,假设我们决定 序列0200(仅一个字节)进入日语模式,其中成对 0240到0377范围内的字节数是单个字符,而 0201进入Latin-1模式,其中0240范围内的单个字节 到0377是字符,并根据ISO Latin-1进行解释 字符集。这是一个多字节代码,具有两个备用移位 状态(“日语模式”和“拉丁1模式”)以及两个换档序列 指定特定的换档状态。
初始换档状态只是初始换档状态,即在处理开始时;在上面的示例中,相关序列以ISO Latin-1或日语中的任何一个开头。