3

Luastring.format( "%c", value )は と同等であるべきstring.char( value )ですか?

文字値がゼロの場合はそうではないようです。

string.format( "%c", 0 ):len()

0 を返します

string.char( 0 ):len()

1 を返します

さらに見知らぬ人、

string.format( "%c%s", 0, "abc" ):len()

3 を返します。%c の他のゼロ以外のモジュロ 256 値は 4 を返すため、string.formatC のように null バイトで文字列全体を切り捨てるのではなく、フィールドを 1 バイト文字列ではなく空の文字列にsprintf折りたたむだけです。%cこの場合、Csprintfは 0 バイトの後に abc バイトを書き込むことに注意してください。

この場合に予想される動作を説明している Lua ドキュメントには何も見つかりませんでした。Lua の他のほとんどの文字列処理では、0 バイトを有効な文字列として扱うようです。

これは OpenWrt の Lua 5.1.4-8 にあります。

特異性またはバグ?

4

2 に答える 2

0

本「luaでのプログラミング」第2版。章 2.4 には、以下のような文脈があります:任意のバイナリ データを文字列に格納できます。」

したがって、これはバグではありません

于 2013-05-16T05:54:04.543 に答える