此示例代码中string.byte
返回的数据类型为:
s = string.byte("hello", 1, 6)
type(s)
会返回"number"
,但为什么print
输出6个数字而不是1?
答案 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;