string.byte返回什么类型的数据?

时间:2013-12-30 19:54:39

标签: string lua byte

此示例代码中string.byte返回的数据类型为:

s = string.byte("hello", 1, 6)

type(s)会返回"number",但为什么print输出6个数字而不是1?

2 个答案:

答案 0 :(得分:5)

如果您告诉它,

string.byte会返回多个数字。 print显示五个数而不是一个数的原因是因为它捕获了所有返回值,而使用赋值时,只使用了第一个值而其余的被丢弃。

local h = string.byte'hello' -- 104, returns only the first byte
local e = string.byte('hello', 2) -- 101, specified index of 2
local s = string.byte('hello', 1, 6) -- 104 101 108 108 111,
                                     -- but s is the only variable available,
                                     -- so it receives just 104
local a, b = string.byte('hello', 1, 6) -- same thing, except now there are two
                                        -- variables available, thus:
                                        -- a = 104 & b = 101
print(string.byte('hello', 1, 6))
104     101     108     108     111
print(string.byte('hello', 1, 6), 0) -- in this case, only the first value from
                                     -- the multiple return is used because there
                                     -- is another argument after the results
104     0

我建议阅读Lua中多个结果和vararg表达式的工作原理。

  

Lua Manual 3.4.10 - Function Definitions

     

[...]如果在另一个表达式内或表达式列表的中间使用了vararg表达式,则其返回列表将调整为一个元素。如果表达式用作表达式列表的最后一个元素,则不进行任何调整(除非最后一个表达式括在括号中)。

答案 1 :(得分:1)

输出是字符的ASCII码 - 请参阅http://www.asciitable.com/

如果需要,可以使用for循环来实现 -

s = "hello";
for i=1,string.len(s) do print(string.byte(s,i)) end;

要将它们重新转换为文本,您可以使用string.char() -

s = "hello";
for i=1,string.len(s) do print(string.char(string.byte(s,i))) end;

您可以考虑使用数组来处理输出: http://www.lua.org/pil/11.1.html

s = "hello"; a = {};
for i=1,string.len(s) do a[i] = string.byte(s,i) end;
for i=1,table.getn(a) do print(a[i]) end;