2

そこにある文字列について何かを読みました: http://www.lua.org/pil/2.4.html

Lua は8 ビット クリーンであるため、文字列にはゼロが埋め込まれているなど、任意の数値の文字が含まれる場合があります。

その8 ビット クリーンとは何を意味するのでしょうか。

任意の数値の文字を含めることができるのはなぜですか? (基本的な C 文字列とは異なります)

4

2 に答える 2

9

文字列を格納するには、次の 2 つの一般的な方法があります。

  1. キャラクターとターミネーター
  2. 長さと文字

#1 を使用する場合、ターミネーターとして機能する 1 文字を「犠牲にする」必要があります。#2を使用すると、そのような制限はありません。

C では、文字列を格納する最初の方法を使用します。文字ゼロをターミネータとして使用します。残りの 255 文字は、文字列の文字を表すために使用できます。

Lua は文字列を格納する 2 番目の方法を使用します。Lua 文字列では、ゼロを含む 256 の可能なすべての文字値を使用できます。たとえば、文字'A'0、から 3 文字の文字列を作成'B'すると、Lua はそれを 3 文字の文字列として扱います。C で同じ文字列を作成できstrlenますが1、その文字列処理ライブラリはそれを 1 文字の文字列として扱います。putsA

于 2012-06-02T03:04:48.467 に答える
0

Lua 文字列型は、カウントされたバイト シーケンスです。1 バイトは、0 から 255 までの任意の値を保持できます。

string 型は、文字列に使用されます。おっしゃる通り、任意のバイト値またはバイト値のシーケンスを許可する文字セット エンコーディングはほとんどありません。コード ページ 437 はそうです。256 文字を 256 の値に、1 文字あたり 1 バイトでマップします。Windows-1252 にはありません。251 文字を 251 の値に、1 文字あたり 1 バイトでマップします。UTF-8 は、1,112,064 文字を 1 ~ 4 バイトのシーケンスにマップします。ここでは、バイトの一部の値が使用されず、値のシーケンスが使用されません。

Lua 文字列ライブラリには、バイトを文字として扱う関数があります。それらの動作は、通常、C ランタイムとそのロケール機能を使用する実装のライブラリの影響を受けます。

Lua には、さまざまな文字セットのエンコーディングを明示的に処理するための専用ライブラリがあります。

于 2014-05-12T16:56:57.363 に答える