pack¶
作者:吴永 更新时间:2020年8月14日 关键字:PWM、脉冲输出
pack¶
pack 库支持将一系列数据按照格式字符转化为 lua 字符串或者将 lua 字符串按照格式字符转化成 一系列值
格式字符串格式如下:
[endianness]< format specifier >[count]
endianness:字节序
‘<’ 小字节序,最低有效字节优先,更低的字节有效位占据着更低地址的内存空间。
‘>’ 大字节序,最高有效字节优先,更高的字节有效位占据着更低地址的内存空间。
‘=’ 自然字节序,默认。
format specifier:参照下面格式化符号
count:取字节个数
格式化符号 |
变量类型 |
---|---|
‘z’ |
以’0’结尾的字符串 |
‘p’ |
在string数据前面加一个字节的string长度数据 |
‘P’ |
在string数据前面加2个字节的string长度数据 |
‘a’ |
在string数据前面加4个字节的string长度数据 |
‘A’ |
字符串(string) |
‘f’ |
浮点数(float) |
‘d’ |
双精度浮点数(double) |
‘n’ |
Lua数字(Lua number) |
‘c’ |
字符(char) |
‘b’ |
字节(byte = unsigned char) |
‘h’ |
短整型(short,两字节) |
‘H’ |
无符号短整型(unsigned short,两字节) |
‘i’ |
整型(int,四字节) |
‘I’ |
无符号整型(unsigned int,四字节) |
‘l’ |
长整型(long,八字节) |
‘L’ |
无符号长整型(unsigned long,八字节) |
pack.pack()¶
打包字符串的值,在pack的时候有符号 无符号的输出结果都是一样的 unpack时有符号跟无符号才有区别
语法
packed = pack.pack( format, val1, val2, ..., valn )
参数
参数
释义
format
格式化符号
val1
第一个需打包的值
val2
第二个需打包的值
valn
第n个需打包的值
返回值
一个包含所有格式化变量的字符串
例子
print("pcak.pack test:")
print(pack.pack("A",10))--当"10"以字符串形式包装时,会打印出“10”
print(common.binstohexs(pack.pack("b",0x10)))--将0x01以十六进制打包为字符串,然后用十六进制输出0x10
print(pack.pack("A","LUAT"))
pack.unpack()¶
解包字符串
语法
nextpos, val1, val2, ..., valn = pack.unpack( string, format,[ init ] )
参数
参数
释义
string
需解包的字符串
format
格式化符号
init(可选)
默认值为1,标记解包开始的位置
返回值
nextpos
字符串标记的位置
val1
第一个解包的值
val2
第二个解包的值
valn
第n个解包的值
例子
print("pack.unpack test:")
nextpox1,val1,val2,val3,val4=pack.unpack("luat100","c4")--"nextpos"下个待解析的位置 ,取4个字符(char)
print(nextpox1,val1,val2,val3,val4) --分别对应的是"5",l","u","a","t"的ascii码数据
print(string.char(val1,val2,val3,val4)) --将ascii码数据转化为字符输出
nextpox2,string1=pack.unpack("luat100","A4")--输出“luat”
print(nextpox2,string1)--输出5 luat
nextpox3,number1,number2=pack.unpack(common.hexstobins("006400000064"),">H>i")--[[输出无符号短型和整形,因为无符号短型是2个字节,整形是4个字节,输出为100,100--]]
print(nextpox3,number1,number2)--输出7 100 100
nextpox3,number1=pack.unpack(common.hexstobins("0064"),">h")--输出为100,因为短型是2个字节
print(nextpox3,number1)--输出3 100