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

在这个示例代码中,string.byte 返回什么类型的数据:

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

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

点赞
用户2997026
用户2997026

输出的是字符的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;
2013-12-30 20:14:56
用户828255
用户828255

string.byte 可以返回多个数字,如果你让它返回的话。print 显示了五个数字而不是一个,是因为它捕捉了所有的返回值,然而用赋值的方式,只有第一个值被使用,其它的则被丢弃。

local h = string.byte'hello' -- 104,只返回第一个字节
local e = string.byte('hello', 2) -- 101,指定索引为2
local s = string.byte('hello', 1, 6) -- 104 101 108 108 111,
                                     -- 但是变量 s 是唯一可用的,
                                     -- 所以它只接收到104
local a, b = string.byte('hello', 1, 6) -- 同样的结果,只是现在有两个变量可用,于是:
                                        -- a = 104, b = 101
print(string.byte('hello', 1, 6))
104     101     108     108     111
print(string.byte('hello', 1, 6), 0) -- 在这种情况下,只有多个返回值的第一个值被使用,
                                     -- 因为在结果之后有另一个参数
104     0

我建议你阅读有关 Lua 中多重返回值和变长表达式是如何工作的。

Lua 手册 3.4.10 - 函数定义

[...] 如果一个变长表达式用在另一个表达式的内部或在一个表达式列表的中间,那么它的返回列表将被调整为一个元素。如果将表达式用作表达式列表的最后一个元素,则不会进行调整(除非该表达式被括在括号内)。

2013-12-30 20:17:56