Lua5.3 笔记
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]: 一个字符串,先将长度以无符号整型写入,后面是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
名词
- alignment:排列
Lua5.3 笔记的更多相关文章
- LUA5.3的BNF范式学习笔记
BNF巴科斯范式 {A} 表示 0 或多个 A , [A] 表示一个可选的 A chunk ::= block block ::= {stat} [retstat] stat ::= ‘;’ ...
- Lua学习笔记一
学习了有一周多了.之前一直不想献丑,但还是记录下这个过程. 第1章 开发软件搭建 1. ubuntu 下lua安装 sudo apt-get install lua5.1 2.win下的环境搭建. ...
- OSRM笔记
OSRM OSRM(OpenStreetMap Routeing Machine)可用于路线规划.作为高性能的路线规划引擎,OSRM使用C++14编写,基于开源的OpenStreetMap数据实现. ...
- CentOS6.5环境配置笔记
CentOS6.5环境配置笔记 一.概述 服务器系统重装,配置应用运行环境 CentOS6.5 x64 二.修改密码 重新设置登录密码 $passwd 或 $passwd root 三.配置端口号及防 ...
- MySQL主从同步、读写分离配置步骤、问题解决笔记
MySQL主从同步.读写分离配置步骤.问题解决笔记 根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记: 现在使用的两台服务器已经 ...
- LuaForWindows_v5.1.4-45和lua-5.1.4.tar.gz
Lua学习笔记(一) 安装调试环境 Lua学习笔记(一) 安装调试环境 觉得自己是该掌握一门脚本语言的时候了,虽然曾经用过C# 和JavaScript 写过Unity3D的脚本.但是,总觉得那 ...
- [Lua游戏AI开发指南] 笔记零 - 框架搭建
一.图书详情 <Lua游戏AI开发指南>,原作名: Learning Game AI Programming with Lua. 豆瓣:https://book.douban.com/su ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
随机推荐
- 曲线艺术编程 coding curves 第六章 平托图 (Pintographs)
第六章 平托图 (Pintographs) 原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗( ...
- CSS 图片加载提前占位 padding-top、padding-bottom
今天聊一个图片加载提前占位的一个问题 ,内容比较适合初学者. 起因 在响应式页面当中,图片加载之前是不知道图片高度的,加载成功图片完全撑开.如果不做提前占位会把下面的内容挤下去,页面出现抖动,就像下面 ...
- Python生成指定大小的文件
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/400bd75c.html 你好,我是测试蔡坨坨. 在日常测试工作中,我们经常需要对上传的文件大小进行测试,例如:一个文件上传 ...
- 20200411 联想Yoga 2 13升级大SSD
20200411:下文的操作实际发生在2018年11月,当时完成了就写好了这篇文章,却忘了放上来,最近家里一个电脑的硬盘坏了,来翻箱底才找到,现在发上来. 原配置:Lonevo Yoga2 13,唯一 ...
- Dash应用页面整体布局技巧
本文示例代码已上传至我的Github仓库:https://github.com/CNFeffery/dash-master 大家好我是费老师,对于刚上手dash应用开发的新手朋友来说,如何进行合理且美 ...
- 2. Tomcat-Servlet
1. Tomcat 目录结构说明: bin 可执行文件目录 conf 配置文件目录 lib 存放 lib 的目录 logs 日志文件目录 webapps 项目部署的目录 work 工作目 ...
- 【后端面经-Java】AQS详解
目录 1. AQS是什么? 2. AQS核心思想 2.1 基本框架 2.1.1 资源state 2.1.2 CLH双向队列 2.2 AQS模板 3. 源码分析 3.1 acquire(int) 3.1 ...
- 统信UOS国产服务器操作系统(UOS Server 20-1060e)安装使用体验
总体来说,UOS系统的安装还是很简明的.需要注意的是后期的驱动安装和其他各方面的使用细节. 以下是具体安装过程:(感谢统信软件河北团队的大力支持.) 特别感谢统信的郭赞.喵喵喵.Zero等各位大神的帮 ...
- 2023-07-06:RabbitMQ中的AMQP是什么?
2023-07-06:RabbitMQ中的AMQP是什么? 答案2023-07-06: AMQP AMQP(Advanced Message Queuing Protocol)是一个应用层协议的开放标 ...
- 聊聊Zookeeper技术内幕之客户端与SetData请求处理
从客户端会话创建到网络连接.请求处理,简单的叙述下流程与逻辑 客户端 客户端是开发人员使用ZooKeeper最主要的途径,ZooKeeper的客户端主要由以下几个核心组件组成. ZooKeeper实例 ...