Lua中string.byte()的使用
原文链接
string.byte()##
- 原型:string.byte (s [, i [, j] ])
- 解释:函数返回字符
s[i], s[i+1], ···, s[j]
的内部数字编码(ASCII码),其中参数i
的默认值是1,而参数j
的默认值是i
。需要注意的是该函数在返回的数字编码在跨平台方面不一定是可移植的。
注1:在string.byte函数中,我们可以将参数 “i” 当作字符的起始位置,而参数 “j” 作为终止位置,依次得到每个字符的对应的ASCII码
注2:我们可以根据字符的ASCII码,了解字符字符的字节数量,从而判定该字符是否为汉字。详情请参照:获取字符长度
Usage##
- 首先新建一个文件将文件命名为bytetest.lua然后编写如下代码:
-- 首先定义一个字符串 local str = "012abcd" print("str = "..str) -- 使用常规方式 print("\nafter string.byte(str,1,4)") print(string.byte(str,1,4)) -- 使用另一种表现方式 print("\nafter str:byte(1,4)") print(str:byte(1,4)) -- 使用负数索引 print("\nafter str:byte(-2,-1)") print(str:byte(-2,-1)) -- 当参数i大于j时 print("\nafter str:byte(2,1)") print(str:byte(2, 1)) -- 当索引无效时 print("\nafter str:byte(2000,1000000)") print(str:byte(2000,1000000))
- 运行结果
总结#
- 首先需要注意的是这个字符串字处理库假想字符串都是单字节编码的。
- 在代码的示例中我们测试了这个函数的两种写法结果都是一样的。
- 通过结果可知使用负数来作为字符串中字符的索引也是没有问题的。
- 我们发现代码
str:byte(2, 1)
是没有结果的,原因是这个函数不能从后往前依次显示字符的ASCII码,不管是证书索引还是负数索引,需要满足参数i
要小于等于参数j
的值。 - 从最后一组测试可以看出当引用的索引在原字符串中不存在时,函数也是没有返回结果的