unity 使用lua处理byte数组

前言

一般untiy中网络处理都是使用C#,但是如果使用lua做热更开发的话,很多逻辑需要在lua端写,比如网络协议,会使用lua-protobuf,lua-pbc等。那么网络的字节拼接就需要在lua端拼接好,再回传给C#,

目前拼接字节有两种方案:

1.使用C#的MemoryBuffer+BinaryReader和BinaryWriter进行拼接

2.使用lua的string.pack和string.unpack进行拼接

如果使用C#进行拼接,那么最好是在C#端直接做,如果在lua端做,就需要lua调用C#的代码。但是网络数据是很频繁的,如果频繁的这么操作,就可能带来性能问题,产生大量gc

语法

下面就介绍下如何使用lua自带的pack机制处理字节流byte[]

语法:

string.pack (fmt, v1, v2, ···)
返回一个打包了(即以二进制形式序列化) v1, v2 等值的二进制字符串。 字符串 fmt 为打包格式(参见 §6.4.2)。

string.unpack (fmt, s [, pos])
返回以格式 fmt (参见 §6.4.2) 打包在字符串 s (参见 string.pack) 中的值。 选项 pos(默认为 1 )标记了从 s 中哪里开始读起。 读完所有的值后,函数返回 s 中第一个未读字节的位置。

其中fmt,格式很多,加下表:https://www.runoob.com/manual/lua53doc/manual.html#6.4.2

<
上一篇:struct模块使用


下一篇:Tk 的基本概念-组件—Tkinter 教程系列03