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:排列

Lua5.3 笔记的更多相关文章

  1. LUA5.3的BNF范式学习笔记

     BNF巴科斯范式 {A} 表示 0 或多个 A , [A] 表示一个可选的 A    chunk ::= block block ::= {stat} [retstat] stat ::= ‘;’ ...

  2. Lua学习笔记一

    学习了有一周多了.之前一直不想献丑,但还是记录下这个过程. 第1章  开发软件搭建 1. ubuntu 下lua安装 sudo apt-get install lua5.1 2.win下的环境搭建. ...

  3. OSRM笔记

    OSRM OSRM(OpenStreetMap Routeing Machine)可用于路线规划.作为高性能的路线规划引擎,OSRM使用C++14编写,基于开源的OpenStreetMap数据实现. ...

  4. CentOS6.5环境配置笔记

    CentOS6.5环境配置笔记 一.概述 服务器系统重装,配置应用运行环境 CentOS6.5 x64 二.修改密码 重新设置登录密码 $passwd 或 $passwd root 三.配置端口号及防 ...

  5. MySQL主从同步、读写分离配置步骤、问题解决笔记

    MySQL主从同步.读写分离配置步骤.问题解决笔记 根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记:       现在使用的两台服务器已经 ...

  6. LuaForWindows_v5.1.4-45和lua-5.1.4.tar.gz

    Lua学习笔记(一) 安装调试环境 Lua学习笔记(一) 安装调试环境     觉得自己是该掌握一门脚本语言的时候了,虽然曾经用过C# 和JavaScript 写过Unity3D的脚本.但是,总觉得那 ...

  7. [Lua游戏AI开发指南] 笔记零 - 框架搭建

    一.图书详情 <Lua游戏AI开发指南>,原作名: Learning Game AI Programming with Lua. 豆瓣:https://book.douban.com/su ...

  8. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  9. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  10. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

随机推荐

  1. 记一次BootCDN被黑产挂马导致站点跳转博彩网站的问题

    近期发现公司某些站点出现偶尔跳转博彩网站的现象,经过排查发现该现象为供应链投毒攻击,BootCDN上的静态资源无一例外均被污染, 当外站引入BootCDN的静态资源时,如果请求携带的Referer头为 ...

  2. 通过redis学网络(2)-redis网络模型

    本系列主要是为了对redis的网络模型和集群原理进行学习,我会用golang实现一个reactor网络模型,并实现对redis协议的解析. 系列源码已经上传github https://github. ...

  3. 基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板

    最近得空学习了下uniapp结合vue3搭建跨端项目.之前也有使用uniapp开发过几款聊天/仿抖音/后台管理等项目,但都是基于vue2开发.随着vite.js破局出圈,越来越多的项目偏向于vue3开 ...

  4. 【项目学习】ERC-4337 抽象账户项目审计过程中需要注意的安全问题

    抽象账户是什么 抽象账户(也有叫合约钱包)是 EIP-4337 提案提出的一个标准.简单来说就是通过智能合约来实现一个"账户(account)",在合约中自行实现签名验证的逻辑.这 ...

  5. Tomcat启动时出现乱码的解决方式

    在网上下载了一个版本号为apache-tomcat-8.5.38的Tomcat,因为这个Tomcat一直没有用过,所以今天启动时出现了如下乱码: 解决方案: 找到Tomcat目录下conf文件夹中的l ...

  6. Excel 进度图表制作

    Excel 改变图标的形状 最终效果 过程有点杂乱,不再重新整理,基本照着下面的设就完事了. 未完成的想用柱型,和已完成的相结合 右击,更改表类型 选择簇状柱形图.次标轴 注意主.次坐标 进度改为折线 ...

  7. 打开页面就能玩?ZEGO 发布行业首套 Web 端在线 KTV 解决方案

    近些年,在线K歌行业逐渐开始规模化发展,活跃用户不断破新高,据 ZEGO 即构科技研究院数据显示,2021 年中国在线 K 歌用户规模逾 5.2亿,网民渗透率达到 50%. 凭借着极大的便利性和娱乐性 ...

  8. Flask结合gunicorn和nginx反向代理的生产环境部署及踩坑记录

    前言 之前自己写的flask使用gunicorn上线生产环境没有什么问题,但是最近搭建了一个现成的flask项目,当使用python直接运行时不会有问题,而使用gunicorn时则会出现一些问题. 部 ...

  9. Linux 概念:u-boot

    U-Boot介绍 参考:https://baike.baidu.com/item/U-Boot/10377075 参考:https://u-boot.readthedocs.io/en/latest/ ...

  10. 《HelloGitHub》第 88 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...