2012-06-02 26 views
1

我讀的東西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_字符可以包含任何數值。 –

回答

9

有兩種常見的方法來存儲字符串:

  1. 特點和終結者
  2. 長度和字符

當您使用#1,您需要「犧牲」一個字符作爲終結者;當你使用#2時,你沒有這樣的限制。

C使用第一種存儲字符串的方法。它使用字符零作爲終結者;其他255個字符可用於表示字符串的字符。

Lua使用第二種存儲字符串的方法。所有256個可能的字符值,包括零,都可以在Lua字符串中使用。例如,您可以從字符'A'0'B'構造一個三字符字符串,而Lua會將其視爲三個字符的字符串。您可以在C中構造相同的字符串,但其字符串處理庫會將其視爲單字符字符串:strlen將返回1,puts將寫入字符A並停止,依此類推。

+0

我看到了,就像ngx_str_t。 – ZIFF

0

Lua字符串類型是一個計數的字節序列。一個字節可以保存0到255之間的任何值。

字符串類型用於字符串。你是對的,很少字符集編碼允許任何字節值或字節值序列。代碼頁437是這樣做的;它將256個字符映射到256個值,每個字符一個字節。 Windows-1252不會;它將251個字符映射到251個值,每個字符一個字節。 UTF-8將1,112,064個字符映射到1到4個字節的序列,其中不使用某些字節值,並且不使用某些值序列。

Lua字符串庫確實具有將字節視爲字符的函數。它們的行爲受實現的庫的影響,這些庫通常使用C運行時及其語言環境特性。

有專門的庫可供Lua明確處理各種字符集編碼。

相關問題