什么是“初始换档状态”?

时间:2019-12-24 16:37:29

标签: c++ c file initialization character

在标准中,“初始移位状态”一词经常被引用,似乎在各种情况下也是如此,例如多字节字符(字符串)和文件。但是该标准没有解释确切的含义。

那是什么?那么什么是一般的“转变”?

也:

因为这个词对我来说似乎是在不同的上下文中使用的(在字符上下文中,在字符串上下文中以及在文件上下文中),所以我将指出标准中的一些文本短语(尤其是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长度修饰符,则输入应为从初始移位状态开始的多字节字符序列。”

  • “初始移位状态”是什么意思?那是什么?
  • 什么是上下文中的“转变”?
  • 在字符串上下文中,双引号"是格式字符串的开头还是结尾?

谢谢。

1 个答案:

答案 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或日语中的任何一个开头。