OCaml char 是否正好代表 8 位?
Does an OCaml char represent exactly 8 bits?
从 Char 库文档中,我看到字符至少能够表示 ISO/IEC 8859-1 字符集,该字符集每个字符使用 8 位。 OCaml 字符是否正好代表 8 位,不多也不少?这记录在哪里?
文档是这样说的:
Character values are represented as 8-bit integers between 0 and 255. Character codes between 0 and 127 are interpreted following the ASCII standard. The current implementation interprets character codes between 128 and 255 following the ISO 8859-1 standard.
所以是的,一个 OCaml 字符恰好代表 8 位。
基本值的文档在这里:OCaml Manual, Chapter 9.2. Values。
更新
可能值得注意的是,虽然 OCaml 中的 char
值只能取 0 到 255 之间的值,但在主线 OCaml 版本(来自 INRIA)中,实际 space 占用内存char
的值与 int
的值相同。在 32 位实现中,这将是 32 位,而在 64 位实现中,它将是 64 位。因此(例如)char array
不是 space-efficient 存储多个 char
的方式。您可以使用 string
或 bytes
来紧凑存储 char 值(每个 8 位)。
OCaml 值表示的文档在此处:OCaml Manual, Chapter 20.3, Representation of OCaml Data Types。
根据 OCaml 语言和运行时的实现,char 类型的表示可能会有所不同。虽然所有字符都应适合 8 位,但实现可能会使用更大的类型来表示它。 Char
抽象保证不可能创建使用超过 8
位的字符。即使 OCaml 的 INRIA 实现表示 Char.t
与 Int.t
相同,它仍然依赖于 char 适合 8 位的假设。例如,n
个字符的双数组将占用 n
个字节。 String.t
的字节大小与组成字符串的字符数成正比。最后但同样重要的是,各种外部(即用 C 实现)函数和优化的编译器本身将假设一个字符适合 8 位。
从 Char 库文档中,我看到字符至少能够表示 ISO/IEC 8859-1 字符集,该字符集每个字符使用 8 位。 OCaml 字符是否正好代表 8 位,不多也不少?这记录在哪里?
文档是这样说的:
Character values are represented as 8-bit integers between 0 and 255. Character codes between 0 and 127 are interpreted following the ASCII standard. The current implementation interprets character codes between 128 and 255 following the ISO 8859-1 standard.
所以是的,一个 OCaml 字符恰好代表 8 位。
基本值的文档在这里:OCaml Manual, Chapter 9.2. Values。
更新
可能值得注意的是,虽然 OCaml 中的 char
值只能取 0 到 255 之间的值,但在主线 OCaml 版本(来自 INRIA)中,实际 space 占用内存char
的值与 int
的值相同。在 32 位实现中,这将是 32 位,而在 64 位实现中,它将是 64 位。因此(例如)char array
不是 space-efficient 存储多个 char
的方式。您可以使用 string
或 bytes
来紧凑存储 char 值(每个 8 位)。
OCaml 值表示的文档在此处:OCaml Manual, Chapter 20.3, Representation of OCaml Data Types。
根据 OCaml 语言和运行时的实现,char 类型的表示可能会有所不同。虽然所有字符都应适合 8 位,但实现可能会使用更大的类型来表示它。 Char
抽象保证不可能创建使用超过 8
位的字符。即使 OCaml 的 INRIA 实现表示 Char.t
与 Int.t
相同,它仍然依赖于 char 适合 8 位的假设。例如,n
个字符的双数组将占用 n
个字节。 String.t
的字节大小与组成字符串的字符数成正比。最后但同样重要的是,各种外部(即用 C 实现)函数和优化的编译器本身将假设一个字符适合 8 位。