2

我在那里读到了一些关于字符串的东西: http ://www.lua.org/pil/2.4.html

Lua 是8 位干净的,因此字符串可以包含任何数值的字符,包括嵌入的 zeros

八位清洁是什么意思?

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

4

2 回答 2

9

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

  1. 人物与终结者
  2. 长度和字符

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

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

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

于 2012-06-02T03:04:48.467 回答
0

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

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

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

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

于 2014-05-12T16:56:57.363 回答