testFormatString.lua 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. --- 模块功能:格式化字符串功能测试.
  2. -- @author openLuat
  3. -- @module formatString.testFormatString
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2018.03.27
  7. module(...,package.seeall)
  8. require"common"
  9. require"utils"
  10. --[[函数名:bittese
  11. 功能:介绍bit库的使用,并打印出来
  12. 返回值:无--]]
  13. local function bittest()
  14. print("bittest:") --程序运行开始标记
  15. print(bit.bit(2))--参数是位数,作用是1向左移动两位,打印出4
  16. print(bit.isset(5,0))--第一个参数是是测试数字,第二个是测试位置。从右向左数0到7。是1返回true,否则返回false,该返回true
  17. print(bit.isset(5,1))--打印false
  18. print(bit.isset(5,2))--打印true
  19. print(bit.isset(5,3))--返回返回false
  20. print(bit.isclear(5,0))--与上面的相反
  21. print(bit.isclear(5,1))
  22. print(bit.isclear(5,2))
  23. print(bit.isclear(5,3))
  24. print(bit.set(0,0,1,2,3))--在相应的位数置1,打印15
  25. print(bit.clear(5,0,2)) --在相应的位置置0,打印0
  26. print(bit.bnot(5))--按位取反
  27. print(bit.band(1,1))--与,--输出1
  28. print(bit.bor(1,2))--或,--输出3
  29. print(bit.bxor(1,2))--异或,相同为0,不同为1
  30. print(bit.lshift(1,2))--逻辑左移,“100”,输出为4
  31. print(bit.rshift(4,2))--逻辑右移,“001”,输出为1
  32. print(bit.arshift(2,2))--算数右移,左边添加的数与符号有关,输出为0
  33. end
  34. --[[
  35. 函数名:packedtest
  36. 功能:扩展库pack的功能演示
  37. 参数:无
  38. 返回值:无
  39. --]]
  40. local function packedtest()
  41. --[[将一些变量按照格式包装在字符串.'z'有限零字符串,'p'长字节优先,'P'长字符优先,
  42. 'a'长词组优先,'A'字符串型,'f'浮点型,'d'双精度型,'n'Lua 数字,'c'字符型,'b'无符号字符型,'h'短型,'H'无符号短型
  43. 'i'整形,'I'无符号整形,'l'长符号型,'L'无符号长型,">"表示大端,"<"表示小端。]]
  44. print("pcak.pack test:")
  45. print(string.toHex(pack.pack(">H",0x3234)))
  46. print(string.toHex(pack.pack("<H",0x3234)))
  47. --字符串,无符号短整型,字节型,打包成二进制字符串。由于二进制不能输出,所以转化为十六进制输出。
  48. print(string.toHex(pack.pack(">AHb","LUAT",100,10)))
  49. print("pack.unpack test:")
  50. local stringtest = pack.pack(">AHb","luat",999,10)
  51. --"nextpos"解析开始的位置,解析出来的第一个值val1,第二个val2,第三个val3,根据后面的格式解析
  52. --这里的字符串要截取出来,如果截取字符串,后面的短整型和一个字节的数都会被覆盖。
  53. nextpox1,val1,val2 = pack.unpack(string.sub(stringtest,5,-1),">Hb")
  54. --nextpox1表示解包后最后的位置,如果包的长度是3,nextpox1输出就是4。匹配输出999,10
  55. print(nextpox1,val1,val2)
  56. end
  57. --[[
  58. 短整型 占2个字节
  59. 长整型 占用4个字节(32位)
  60. double型 占4个字节
  61. long double型 占8个字节
  62. 数据类型 取值范围
  63. 整型 [signed]int -2147483648~+2147483648
  64. 无符号整型unsigned[int] 0~4294967295
  65. 短整型 short [int] -32768~32768
  66. 无符号短整型unsigned short[int] 0~65535
  67. 长整型 Long int -2147483648~+2147483648
  68. 无符号长整型unsigned [int] 0~4294967295
  69. 字符型[signed] char -128~+127
  70. 无符号字符型 unsigned char 0~255
  71. 不支持小数类型 --]]
  72. --[[
  73. 函数名:stringtest
  74. 功能:sting库几个接口的使用演示
  75. 参数:无
  76. 返回值:无--]]
  77. local function stringtest()
  78. print("stringtest:")
  79. --注意string.char或者string.byte只针对一个字节,数值不可大于256
  80. print(string.char(97,98,99))--将相应的数值转化为字符
  81. print(string.byte("abc"),2) --第一个参数是字符串,第二个参数是位置。功能是:将字符串中所给定的位置转化为数值
  82. local i=100
  83. local string1="luat100great"
  84. print("string.format\r\n",string.format("%04d//%s",i,string1))--[[指示符后的控制格式的字符可以为:十进制'd';十六进制'x'
  85. 八进制'o';浮点数'f';字符串's',控制格式的个数与后面的参数个数一致。功能:按照特定格式输出参数。--]]
  86. --打印出"luat great"
  87. print("string.gsub\r\n",string.gsub("luat is","is","great"))--第一个参数是目标字符串,第二个参数是标准字符串,第三个是待替换字符串
  88. --打印出目标字符串在查找字符串中的首尾位置
  89. print("string.find\r\n",string.find(string1,"great"))
  90. --匹配字符串,加()指的是返回指定格式的字符串,截取字符串中的数字
  91. print("string.match\r\n",string.match(string1,"luat(%d+)great"))
  92. --截取字符串,第二个参数是截取的起始位置,第三个是终止位置。
  93. print("string.sub\r\n",string.sub(string1,1,4))
  94. end
  95. --[[函数名:bitstohexs()
  96. 功能:将二进制数字转化为十六进制,并输出转换后的十六进制数字串,每个字节之间用分隔符隔开
  97. 打印出十六进制数字串
  98. 参数:第一个参数二进制数字,第二个是分隔符
  99. 返回值: --]]
  100. local function binstohexs(binstring,s)
  101. print(string.toHex(binstring,s)) --调用了基本库中的common库,输出十六进制数字串
  102. end
  103. --[[函数名: hexstobits
  104. 功能:将十六进制数转换为二进制数,并储存在数组中,输出转化后的二进制数
  105. 参数:十六进制数
  106. 返回值: --]]
  107. local function hexstobins(hexstring)--将十六进制数字转化为二进制字符串
  108. print(string.fromHex(hexstring)) --注意二进制中有些是可打印可见的,有些则不是
  109. end
  110. --[[
  111. 函数名:ucs2ToGb2312
  112. 功能 :unicode小端编码 转化为 gb2312编码,并打印出gd2312编码数据
  113. 参数 :
  114. ucs2s:unicode小端编码数据,注意输入参数的字节数
  115. 返回值:
  116. ]]
  117. local function ucs2ToGb2312(ucs2s)
  118. print("ucs2ToGb2312")
  119. local gd2312num = common.ucs2ToGb2312(ucs2s)--调用的是common.ucs2ToGb2312,返回的是编码所对应的字符串
  120. print("gb2312 code:",gd2312num)
  121. end
  122. --[[
  123. 函数名:gb2312ToUcs2
  124. 功能 :gb2312编码 转化为 unicode十六进制小端编码数据并打印
  125. 参数 :
  126. gb2312s:gb2312编码数据,注意输入参数的字节数
  127. 返回值:
  128. ]]
  129. local function gb2312ToUcs2(gd2312num)
  130. print("gb2312ToUcs2")
  131. local ucs2num=common.gb2312ToUcs2(gd2312num)
  132. print("unicode little-endian code:"..string.toHex(ucs2num))--要将二进制转换为十六进制,否则无法输出
  133. end
  134. --[[
  135. 函数名:ucs2beToGb2312
  136. 功能 :unicode大端编码 转化为 gb2312编码,并打印出gb2312编码数据,
  137. 大端编码数据是与小端编码数据位置调换
  138. 参数 :
  139. ucs2s:unicode大端编码数据,注意输入参数的字节数
  140. 返回值:
  141. ]]
  142. local function ucs2beToGb2312(ucs2s)
  143. print("ucs2beToGb2312")
  144. local gd2312num=common.ucs2beToGb2312(ucs2s) --转化后的数据直接变成字符可以直接输出
  145. print("gd2312 code :"..gd2312num)
  146. end
  147. --[[
  148. 函数名:gb2312ToUcs2be
  149. 功能 :gb2312编码 转化为 unicode大端编码,并打印出unicode大端编码
  150. 参数 :
  151. gb2312s:gb2312编码数据,注意输入参数的字节数
  152. 返回值:unicode大端编码数据
  153. ]]
  154. function gb2312ToUcs2be(gb2312s)
  155. print("gb2312ToUcs2be")
  156. local ucs2benum=common.gb2312ToUcs2be(gb2312s)
  157. print("unicode big-endian code :"..string.toHex(ucs2benum))
  158. end
  159. --[[
  160. 函数名:ucs2ToUtf8
  161. 功能 :unicode小端编码 转化为 utf8编码,并打印出utf8十六进制编码数据
  162. 参数 :
  163. ucs2s:unicode小端编码数据,注意输入参数的字节数
  164. 返回值:
  165. ]]
  166. local function ucs2ToUtf8(usc2)
  167. print("ucs2ToUtf8")
  168. local utf8num=common.ucs2ToUtf8(usc2)
  169. print("utf8 code:"..string.toHex(utf8num))
  170. end
  171. --[[
  172. 函数名:utf8ToGb2312
  173. 功能 :utf8编码 转化为 gb2312编码,并打印出gb2312编码数据
  174. 参数 :
  175. utf8s:utf8编码数据,注意输入参数的字节数
  176. 返回值:
  177. ]]
  178. local function utf8ToGb2312(utf8s)
  179. print("utf8ToGb2312")
  180. local gb2312num=common.utf8ToGb2312(utf8s)
  181. print("gd2312 code:"..gb2312num)
  182. end
  183. --[[ 函数调用--]]
  184. bittest()
  185. packedtest()
  186. stringtest()
  187. --[[测试程序,接口举例,用模拟器就可以直接测试,以“我”为例--]]
  188. binstohexs("ab")
  189. hexstobins("3132")
  190. ucs2ToGb2312(string.fromHex("1162")) --"1162"是"我"字的ucs2编码,这里调用了string.fromHex将参数转化为二进制,也就是两个字节。
  191. gb2312ToUcs2(string.fromHex("CED2")) --"CED2"是"我"字的gb22312编码
  192. ucs2beToGb2312(string.fromHex("6211"))--"6211"是"我"字的ucs2be编码
  193. gb2312ToUcs2be(string.fromHex("CED2"))
  194. ucs2ToUtf8(string.fromHex("1162"))
  195. utf8ToGb2312(string.fromHex("E68891"))--"E68891"是"我"字的utf8编码