为什么Lua的字符串可以包含任何数字值的字符?

时间:2012-06-02 02:39:03

标签: lua

我在那里读了一些字符串: http://www.lua.org/pil/2.4.html

Lua 八位干净,因此字符串可能包含任意数字的字符,包含嵌入的零

八位清洁是什么意思?

为什么它可以包含任何数字值的字符? (与基本c字符串不同)

2 个答案:

答案 0 :(得分:9)

存储字符串有两种常用方法:

  1. 字符和终结者
  2. 长度和字符
  3. 当你使用#1时,你需要“牺牲”一个角色作为终结者;当你使用#2时,你没有这样的限制。

    C使用第一种存储字符串的方法。它使用字符零作为终结符;其他255个字符可用于表示字符串的字符。

    Lua使用第二种存储字符串的方法。所有256个可能的字符值(包括零)都可以在Lua字符串中使用。例如,您可以使用字符'A'0'B'构造三个字符的字符串,Lua会将其视为三个字符的字符串。您可以在C中构造相同的字符串,但其字符串处理库会将其视为单字符字符串:strlen将返回1puts将写入字符{{1}停止等等。

答案 1 :(得分:0)

Lua字符串类型是计数的字节序列。一个字节可以保存0到255之间的任何值。

字符串类型用于字符串。你是对的,很少有字符集编码允许任何字节值或字节值序列。代码页437是一个;它将256个字符映射到256个值,每个字符一个字节。 Windows-1252没有;它将251个字符映射到251个值,每个字符一个字节。 UTF-8将1,112,064个字符映射到一到四个字节的序列,其中不使用某些字节值,并且不使用某些值序列。

Lua字符串库确实具有将字节视为字符的函数。它们的行为受实现库的影响,这些库通常使用C运行时及其语言环境特性。

Lua有专门的库来显式处理各种字符集编码。