Lua5.3 笔记
最近用skynet,sproto通讯,完全看不懂通讯二进制是怎么写的,发现都是string这个,string那个,完全理解不来。
于是查了一下string.pack的api,和之前别的语言里面用的writeByte,writeShort,writeUnsignedInt这样的写法完全是不一样的。
然后在此记录下来。
参考
API
string.pack, string.unpack, string.packsize的接收的第一个参数的一个格式化的字符串,这个字符串决定了接下来创建的字符串结构的读或者写的方式。
格式化字符串是一个约定序列,可用约定选项如下:
- <: 使用little endian
- >: 使用big endian
- =: 使用本地默认endian
- [n]: 设置最大alignment为 n (默认本地 alignment)
- b: 一个带符号字节 (char)
- *B: 一个无符号字节 (char)
- h: 一个带符号短整(本地尺寸)
- H: 一个无符号短整(本地尺寸)
- l: 带符号长整型 (本地尺寸)
- L: 无符号长整型 (本地尺寸)
- j: 一个lua_Integer
- J: 一个lua_Unsigned
- T: 一个size_t (native size)
- i[n]: n个字节的带符号int (默认本地尺寸)
- I[n]: n个字节的无符号int (默认本地尺寸)
- f: 浮点型 (本地尺寸)
- d: double型 (本地尺寸)
- n: 一个lua_Number
- cn: 一个固定n个字节长度的字符串
- z: 一个 zero-terminated 字符串
- s[n]: a string preceded by its length coded as an unsigned integer with n bytes (default is a size_t)
- x: one byte of padding
- Xop: an empty item that aligns according to option op (which is otherwise ignored)
- ‘ ‘: (empty space) ignored