从Char库文档中,我发现字符至少能够表示ISO/IEC 8859-1字符集,即每个字符使用8位的字符集。OCaml字符是否正好代表8位,不多也不少?这些记录在哪里?
文档中这样写道:
字符值表示为0到255之间的8位整数。0和127之间的字符代码按照ASCII标准进行解释。当前的实现按照ISO 8859-1标准解释128和255之间的字符代码。
所以是的,OCaml字符正好代表8位。
基本值的文档如下:OCaml手册,第9.2章。价值观
更新
值得注意的是,尽管OCaml中的char
值只能取0到255之间的值,但在主线OCaml版本(来自INRIA(中,char
值在内存中占用的实际空间与int
相同。在32位的实现中,这将是32位,而在64位的实现中将是64位。因此(例如(char array
不是存储多个char
s的节省空间的方法。您可以使用string
或bytes
来获得字符值的紧凑存储(每个值为8位(。
OCaml值表示的文档如下:OCaml手册,第20.3章,OCaml数据类型的表示。
根据OCaml语言和运行时的实现,char类型的表示可能会有所不同。虽然所有字符都应适合8位,但一个实现可以使用更大的类型来表示它。Char
抽象保证不可能创建使用超过8
位的字符。尽管OCaml的INRIA实现表示Char.t
与Int.t
相同,但它仍然依赖于char将适合8位的假设。例如,n
个字符的大数组将占用n
个字节。并且String.t
将具有与组成字符串的字符数成比例的以字节为单位的大小。最后但并非最不重要的是,各种外部(即用C实现(函数和优化的编译器本身将假设一个字符适合8位。