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