Toggle navigation
首页
(current)
问答
文章
话题
商城
登录
注册
3、合宙Air模块Luat开发:实现用"Printf"把文字格式化以后直接输出
LUAT
4G
物联网
Air720SL
二次开发
目录点击这里查看所有博文一、前言在我的第二篇博文中2、Air720SL模块Luat开发:第一个Luat的Hello World(在目录出可找到入口)我们用了一下 print函数实现打印Hello World到日志在Lua语法中p...
# 目录 [点击这里查看所有博文](https://blog.csdn.net/weixin_44570083/article/details/104285283) > 本系列博客,理论上适用于合宙的Air202、Air268、Air720x、Air720S以及最近发布的Air720U(我还没拿到样机,应该也能支持)。 > 先不管支不支持,如果你用的是合宙的模块,那都不妨一试,也许会有意外收获 我使用的是Air720SL模块,如果在其他模块上不能用,那就是底层core固件暂时还没有支持,这里的代码是没有问题的。例程仅供参考! # 一、前言 > 在我的第二篇博文中`2、Air720SL模块Luat开发:第一个Luat的Hello World(在目录出可找到入口)`我们用了一下 > `print`函数实现打印Hello World到日志 > 在Lua语法中print函数可以接收任意字符串实现输出字符到日志 > 1、可以直接输出数字`print(123)`运行结果如下 > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200213105046567.png) > 2、也可以直接字符` print("abc")`运行结果如下 > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200213105213956.png) > 3、还可以混合输出`print("abc"..123)`运行结果如下 > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200213105321335.png) >但是`print`这个函数并不能用来格式化输出 >如果我要输出一个可变化的字符串,不是说`print`函数不行,它也可以,但是却比较麻烦 >比如我要输出下面这样一段字符串,其中标红的是需要随时改变的变量 >Hello `Tom`!my name is:`YXCN`,I am `30` years old now ```c local other="Tom" local name="YXCN" local age=30 print("Hello "..other.."!".."my name is:"..name..",".."I am "..age.." years old now") ``` >用`print`输出,需要写一大段,还要自己用`..`组织字符串连接,一共用了八个字符串连接符,用了六对双引号 >这个例子还好只有三个变量,就已经显得有点复杂,如果变量一多,想都不敢想。 >这样写法阅读起来也是及其困难的,无法直接得出变量是什么类型的,可能是字符串,也可能是数字,还得回去看变量到底是什么值,这节课我们就一起学习一下怎么用Lua实现C语言的Printf格式化输出的功能 # 二、Printf格式化函数输出实现 > 在Lua里面没有`printf`函数,直接写会报错 > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200213111500236.png) > 这里我们需要自己实现一下,代码如下 ```c local function printf(...) print(string.format(...)) end ``` > 现在我们一起来试一下Hello `Tom`!my name is:`YXCN`,I am `30` years old now输出有多简单 ```c local function printf(...) print(string.format(...)) end local other="Tom" local name="YXCN" local age=30 printf("Hello %s ! my name is: %s , I am %d years old now",other,name,age) ``` > 对比两行`print`和`printf`的输出函数,`printf`函数格式化输出只用的一对双引号,结构清晰,能从语句中直接得出,需要输出的是什么格式的数据,很显然第一个转义码%s和第二个转义码%s代表的是字符串,第三个转义码%d代表的是数字 > 在Lua软件上直接输出结果如下,说明语法上是行得通的 > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200213112732472.png) > 这里给出Lua支持所有的转义码 * %c - 接受一个数字, 并将其转化为ASCII码表中对应的字符 * %d, %i - 接受一个数字并将其转化为有符号的整数格式 * %o - 接受一个数字并将其转化为八进制数格式 * %u - 接受一个数字并将其转化为无符号整数格式 * %x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母 * %X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母 * %e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e * %E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E * %f - 接受一个数字并将其转化为浮点数格式 * %g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式 * %q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式 * %s - 接受一个字符串并按照给定的参数格式化该字符串 > 下面我们将程序下载到开发板验证 # 三、下载程序到Air720Sl开发板 > 这里我们直接贴出全部代码 ```c --必须在这个位置定义PROJECT和VERSION变量 --PROJECT:ascii string类型,可以随便定义,只要不使用,就行 --VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义 PROJECT = "LED" VERSION = "0.0.1" require "sys" --加载日志功能模块,并且设置日志输出等级 --如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可 require "log" LOG_LEVEL = log.LOGLEVEL_TRACE local function printf(...) print(string.format(...)) end local function user_main() local other="Tom" local name="YXCN" local age=30 while true do printf("Hello %s ! my name is: %s , I am %d years old now",other,name,age) age = age + 1--一秒加一岁 sys.wait(1000) end end --启动系统框架 sys.taskInit(user_main) sys.init(0, 0) sys.run() ``` > 下载程序后运行结果如下,一秒加一岁,现在已经240多岁了,哈哈 > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200213113713240.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) > 不会下载的[点击这里](https://blog.csdn.net/weixin_44570083/article/details/104285283),进去查看我的第二篇博文`2、Air720SL模块Luat开发:第一个Luat的Hello World`里面讲了怎么下载 > 这里只是我的学习笔记,拿出来给大家分享,欢迎大家批评指正,本篇教程到此结束
发表于 2020-02-13 11:53
阅读 ( 2114 )
分类:
默认分类
7 推荐
收藏
你可能感兴趣的文章
13、RDA8910CSDK二次开发:将你的代码藏起来----编译静态库
5386 浏览
3、RDA8910CSDK二次开发:GPIO输入详解
2043 浏览
11、合宙Air模块Luat开发:通过http协议获取天气信息
2434 浏览
10、合宙Air模块Luat开发:JSON字符串的生成与解析
2299 浏览
9、合宙Air模块Luat开发:认识NVS数据管理模块
1997 浏览
8、合宙Air模块Luat开发:基于官方库的二次封装,使串口更加易用
2556 浏览
相关问题
Air720SL的I2C及I2C2对应设备ID是?如何使用api读写16位地址寄存器
0 回答
关于二次开发功能上的咨询
1 回答
Air208编程
1 回答
Air202设置闹钟“AT+CALA=?”
2 回答
Air202 MQTT如何发送USERNAME PASSWORD ID ?
1 回答
Air200关于SW_DEFAULT_1.0.2_Luat_V0013_Air200_SSL.lod的问题
1 回答
0 条评论
请先
登录
后评论
陈夏
26 篇文章
作家榜
»
技术销售Delectate
43 文章
陈夏
26 文章
国梁
24 文章
miuser
21 文章
晨旭
20 文章
朱天华
19 文章
金艺
19 文章
杨奉武
18 文章
×
发送私信
发给:
内容:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!