什么是'字符集'在这种背景下?

时间:2016-11-06 14:20:36

标签: c

我想知道一个'字符集'是/意味着在以下背景下?

  

C,请记住,使用术语字节来表示用于的大小   保持系统的字符集,因此C字节可以是8位,9位,16位或其他值。

谢谢。

1 个答案:

答案 0 :(得分:2)

引用显示对术语的理解不足。 A"字符集"是一组人物。相反,如C所理解的字节被定义为足够大以包含来自基本字符集的字符,该字符集是实现定义的。通常,"字节" (在C的上下文中)和char是同义词。

一般意义上,字节是数据存储的最小可寻址单位。因此,它的大小取决于您所谈论的任何平台或处理器。对于许多系统,一个字节的大小为8位(一个单位也称为"八位字节")。这就是" byte"通常用来表示" octet"。在一般意义上,"字节"根本不是基于文本编码定义的。

另一方面,在C中,基于文本编码定义了字节。 C 上下文中 的字节由section 3.5 of N1570(最终的C11草案)定义为

  

可寻址的数据存储单元,足以容纳执行环境的基本字符集的任何成员

这通常被理解为等同于char类型。第6.2.5节第3节](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=40)说:

  

声明为类型char的对象足够大,可以存储基本执行字符集的任何成员。如果基本执行字符集的成员存储在char对象中,则其值保证为非负值。

(但是,这并没有明确说明char与C字节相同。而且,char必须至少为8位,因为CHAR_BIT是至少8,以及char是否已签名取决于实施情况。)

C区分了实现的基本字符集及其扩展字符集;这些是在section 5.2.1中定义的。请注意,C没有任何名为"系统的字符集"。基本字符集必须至少包含以下字符:

  • "拉丁字母"的所有大写和小写字母(用英语,没有变音符号),
  • (阿拉伯语)十进制数字(以英文书写),
  • C中使用的29个图形字符(例如!"#)和
  • 一些控制字符(例如空格和'\0')。

顺便说一句,这只是事实的一半; C还区分了一个"源字符集"和一个"执行字符集"。这就引出了一个问题:C是关于由基本源字符集或基本执行字符集定义的字节的想法吗?我没有在标准草案中找到该问题的答案。