ASCII.png
前言#
從今天開始我們要進(jìn)軍字符串操作的庫函數(shù)了,這些函數(shù)都放在全局表string
中缴阎,說起字符串操作熟悉c語言的程序猿都不會陌生只磷,比如strcpy
,strcmp
名惩,strlen
等等澎胡,這些函數(shù)串處理的經(jīng)典函數(shù)。
lua中這個(gè)字符串處理庫也是提供對字符串處理的基本函數(shù)娩鹉,比如查找攻谁、提取子串、弯予,模式匹配等等戚宦,在Lua中字符串的第一個(gè)字母索引為1,這一點(diǎn)不同于c語言中第一個(gè)字母索引為0的約定熙涤,并且在lua中引用字符串的索引可以為負(fù)數(shù)阁苞,表示從字符串的末尾向前查找,比如字符串最后一個(gè)字母的索引可以表示為-1祠挫。
字符串處理庫的所有函數(shù)都被放置在表string
中那槽,并且還為操作的字符串設(shè)置了元表,使得這些字符串有了一個(gè)指向表string
的__idnex
字段等舔,因此你可以用面向?qū)ο蟮姆绞絹碚{(diào)用這些函數(shù)骚灸,比如函數(shù)string,.byte(s, i)
可以寫成`s:byte(i)。
內(nèi)容#
string.byte()##
- 原型:string.byte (s [, i [, j] ])
- 解釋:函數(shù)返回字符
s[i], s[i+1], ···, s[j]
的內(nèi)部數(shù)字編碼(ASCII碼)慌植,其中參數(shù)i
的默認(rèn)值是1甚牲,而參數(shù)j
的默認(rèn)值是i
义郑。需要注意的是該函數(shù)在返回的數(shù)字編碼在跨平臺方面不一定是可移植的。
Usage##
- 首先新建一個(gè)文件將文件命名為bytetest.lua然后編寫如下代碼:
-- 首先定義一個(gè)字符串
local str = "012abcd"
print("str = "..str)
-- 使用常規(guī)方式
print("\nafter string.byte(str,1,4)")
print(string.byte(str,1,4))
-- 使用另一種表現(xiàn)方式
print("\nafter str:byte(1,4)")
print(str:byte(1,4))
-- 使用負(fù)數(shù)索引
print("\nafter str:byte(-2,-1)")
print(str:byte(-2,-1))
-- 當(dāng)參數(shù)i大于j時(shí)
print("\nafter str:byte(2,1)")
print(str:byte(2, 1))
-- 當(dāng)索引無效時(shí)
print("\nafter str:byte(2000,1000000)")
print(str:byte(2000,1000000))
- 運(yùn)行結(jié)果
string_byte.png
總結(jié)#
- 首先需要注意的是這個(gè)字符串字處理庫假想字符串都是單字節(jié)編碼的丈钙。
- 在代碼的示例中我們測試了這個(gè)函數(shù)的兩種寫法結(jié)果都是一樣的非驮。
- 通過結(jié)果可知使用負(fù)數(shù)來作為字符串中字符的索引也是沒有問題的。
- 我們發(fā)現(xiàn)代碼
str:byte(2, 1)
是沒有結(jié)果的雏赦,原因是這個(gè)函數(shù)不能從后往前依次顯示字符的ASCII碼劫笙,不管是證書索引還是負(fù)數(shù)索引,需要滿足參數(shù)i
要小于等于參數(shù)j
的值星岗。 - 從最后一組測試可以看出當(dāng)引用的索引在原字符串中不存在時(shí)填大,函數(shù)也是沒有返回結(jié)果的。