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

问题描述:

我读的东西aboue字符串有: http://www.lua.org/pil/2.4.html为什么Lua的字符串可以包含任何数值的字符?

Lua是八位干净等字符串可能包含的字符与任何数值,包括嵌入式零

那是什么八位清零是什么意思?

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

+2

1. http://en.wikipedia.org/wiki/String_(computer_science)2. http://en.wikipedia.org/wiki/8-bit_clean – mawburn

+2

请不要犹豫,使用您的搜索引擎选择寻找简单问题的详细答案。 – 2012-06-02 02:44:08

+0

_C_字符可以包含任何数值。 –

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

  1. 特点和终结者
  2. 长度和字符

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

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

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

+0

我看到了,就像ngx_str_t。 – ZIFF

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

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

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

有专门的库可供Lua明确处理各种字符集编码。