zoukankan      html  css  js  c++  java
  • Lua5.3 笔记

    Lua5.3 笔记

    最近用skynet,sproto通讯,完全看不懂通讯二进制是怎么写的,发现都是string这个,string那个,完全理解不来。
    于是查了一下string.pack的api,和之前别的语言里面用的writeByte,writeShort,writeUnsignedInt这样的写法完全是不一样的。
    然后在此记录下来。

    参考

    字符串的Pack和Unpack

    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]: 一个字符串,先将长度以无符号整型写入,后面是n个byte (默认是一个 size_t)
    • x: 一个字节的 padding
    • Xop: 一个根据他的选项操作排列的空白item (反之忽略 ignored)
    • ' ': (空格) 忽略

    除了padding,空格和configuration("xX <=>!")之外,每个选项都对应一个参数(string.pack)或者一个结果(string.unpack
    对于 !n , sn , in 以及 In ,_n_可以说1-16之间的任何整数。All integral options check overflows(所有整型都会检查溢出); string.pack 会检查提供的值是否适合提供的尺寸;string.unpack 会检查读取的值是否是一个 Lua Integer。【暂时不懂后半句】
    如果字符串以 "!1=" 为前缀,with maximum alignment of 1 (no alignment) and native endianness. (以本地编码的1的最大排列)
    排列的过程:对于每个选项,如果数据长度不够的话,都会以padding补齐。For each option, the format gets extra padding until the data starts at an offset that is a multiple of the minimum between the option size and the maximum alignment; this minimum must be a power of 2. "c" 和 "z" 不排列; "s" 遵循它开始的整型排列.

    所有的 padding 在 string.pack时都是以0填充 (在 string.unpack 中忽略)

    Demo

    local str = string.pack(">i2",10)
    print(str)
    
    local str = string.unpack(">i2",str)
    print(str)
    

    output:

    a
    
    10
    
    

    UTF8

    居然有6.5 – UTF-8 Support

    名词

    • alignment:排列
  • 相关阅读:
    c#之字符串,列表,接口,队列,栈,多态
    c#之函数
    KMP算法
    字符串Hash
    洛谷P1807 最长路_NOI导刊2010提高(07)
    洛谷P2863 [USACO06JAN]牛的舞会The Cow Prom
    洛谷P2071 座位安排
    二分图最大匹配,匈牙利算法
    差分约束系统
    搜索
  • 原文地址:https://www.cnblogs.com/adoontheway/p/8692234.html
Copyright © 2011-2022 走看看