示例-Luat demo-formatString

本文介绍了Lua中的FormatString操作,包括pack和unpack函数的使用,以及utf8、ucs2、gb2312编码的转换。通过实例演示了数据格式化处理,如字符串的查找、替换、子串提取等,并针对常见问题提供了解决方案,例如处理包含不可见字符的字符串和负数的打包。此外,还展示了不同编码间的转换,如ucs2到gb2312,utf8到gb2312等。
摘要由CSDN通过智能技术生成

FormatString

简介

比特( bit)是二进制单位( binary unit)或二进制数字(binary digit)的缩写,pack 库支持将一系列数据按照格式字符转化为 lua 字符串或者将 lua 字符串按照格式字符转化成一系列值,utf8、 ucs2、 gb2312编码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求:以上都是常见的数据格式。需要进行运算、转换等格式化处理。见指南

材料准备

  1. EVB_Air724UG_A13开发板一套,包括USB线。
  2. luat开发环境:环境搭建方法
    图片.png

步骤

本文以demo/formatString为例做演示。
示例代码和库下载
运行后日志打印如下:
[2021-04-20 14:01:57.761] bittest:
[2021-04-20 14:01:57.761] 4
[2021-04-20 14:01:57.761] true
[2021-04-20 14:01:57.761] false
[2021-04-20 14:01:57.761] true
[2021-04-20 14:01:57.761] false
[2021-04-20 14:01:57.761] false
[2021-04-20 14:01:57.761] true
[2021-04-20 14:01:57.761] false
[2021-04-20 14:01:57.761] true
[2021-04-20 14:01:57.761] 15
[2021-04-20 14:01:57.761] 0
[2021-04-20 14:01:57.761] 4294967290
[2021-04-20 14:01:57.761] 1
[2021-04-20 14:01:57.761] 3
[2021-04-20 14:01:57.761] 3
[2021-04-20 14:01:57.761] 4
[2021-04-20 14:01:57.761] 1
[2021-04-20 14:01:57.761] 0
[2021-04-20 14:01:57.761] pcak.pack test:
[2021-04-20 14:01:57.761] 3234 2
[2021-04-20 14:01:57.761] 3432 2
[2021-04-20 14:01:57.761] 4C55415400640A 7
[2021-04-20 14:01:57.761] pack.unpack test:
[2021-04-20 14:01:57.761] 4 999 10
[2021-04-20 14:01:57.761] stringtest:
[2021-04-20 14:01:57.761] abc
[2021-04-20 14:01:57.761] 97 2
[2021-04-20 14:01:57.761] string.format
[2021-04-20 14:01:57.761] 0100//luat100great
[2021-04-20 14:01:57.761] string.gsub
[2021-04-20 14:01:57.761] luat great 1
[2021-04-20 14:01:57.761] string.find
[2021-04-20 14:01:57.761] 8 12
[2021-04-20 14:01:57.761] string.match
[2021-04-20 14:01:57.761] 100
[2021-04-20 14:01:57.761] string.sub
[2021-04-20 14:01:57.761] luat
[2021-04-20 14:01:57.761] 6162 2
[2021-04-20 14:01:57.761] 12 2
[2021-04-20 14:01:57.761] ucs2ToGb2312
[2021-04-20 14:01:57.761] gb2312 code:
[2021-04-20 14:01:57.761] gb2312ToUcs2
[2021-04-20 14:01:57.761] unicode little-endian code:1162
[2021-04-20 14:01:57.761] ucs2beToGb2312
[2021-04-20 14:01:57.761] gd2312 code :
[2021-04-20 14:01:57.761] gb2312ToUcs2be
[2021-04-20 14:01:57.761] unicode big-endian code :6211
[2021-04-20 14:01:57.761] ucs2ToUtf8
[2021-04-20 14:01:57.761] utf8 code:E68891
[2021-04-20 14:01:57.761] utf8ToGb2312
[2021-04-20 14:01:57.761] gd2312 code:
分析调试:

  • 1、[2021-04-20 14:01:57.761] 97 2
    这个打印的是“97 2”,为什么不是上面的第二个“98 2”,因为string.byte(“abc”)的第二个参数没有,默认输出第一个字符。
  • 2、[2021-04-20 14:01:57.761] 8 12
    print(“string.find\r\n”,string.find(string1,“great”)),字符从左到右计数是从1开始,不是从0开始,所以是8,不是7。
  • 3、字符串中可以有‘NULL’等不可见字符,如下:
    str=string.char(0x2b,0x35,0x00,0x45)
    print(type(str)…#str)
    print(str)
    运行结果为:
    string4
    +5E(5和E之间有个框)
  • 4、如何unpack有符号数
    代码修改如下两行就可以unpack出-100。
    local stringtest = pack.pack(">AHb",“luat”,0xff9c,10)
    nextpox1,val1,val2 = pack.unpack(string.sub(stringtest,5,-1),">hb")
    [2021-04-21 11:55:29.649] pack.unpack test:
    [2021-04-21 11:55:29.649] 4 -100 10
  • 5、为什么汉字显示为空?
    因为luatool只显示utf8编码汉字,在对应的地方加上":toHex()"显示,utf8直接打印:print(“utf8 code:我”…utf8num…string.toHex(utf8num)) 。修改后的打印如下:[2021-04-20 15:01:44.323] ucs2ToGb2312
    [2021-04-20 15:01:44.323] gb2312 code: CED2 2
    [2021-04-20 15:01:44.323] gb2312ToUcs2
    [2021-04-20 15:01:44.323] unicode little-endian code:1162
    [2021-04-20 15:01:44.323] ucs2beToGb2312
    [2021-04-20 15:01:44.323] gd2312 code :CED2
    [2021-04-20 15:01:44.323] gb2312ToUcs2be
    [2021-04-20 15:01:44.323] unicode big-endian code :6211
    [2021-04-20 15:01:44.323] ucs2ToUtf8
    [2021-04-20 15:01:44.323] utf8 code:我我E68891
    [2021-04-20 15:01:44.323] utf8ToGb2312
    [2021-04-20 15:01:44.323] gd2312 code:CED2

常见问题

1、字符串打印为空。原因是字符串里有不可见字符比如“空字符(Null)”,解决方式toHex()后打印。

相关开发板购买链接

Air724UG开发板
Air724 开发板使用说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值