tolualua添加C库的byte[]解析byteArrayipack

更新时间:2023-07-19 04:29:27 阅读: 评论:0

tolualua添加C库的byte[]解析byteArrayipack
为了⽅式封装和解析⼆进制数据 给tolua添加 ipack库 和⼀个lua的解析类 ByteArray
在lua中解析byte[]数据
1 从git上获得 ipack库
ipcak 库修改
添加ipack 注册 找到tolua.c⽂件 tolua_openlibs⽅法 添加这个⽅法
3 ⽣成对应平台的库⽂件 这个教程后期出 不过需要这个功能的⼈应该也是会的
4 添加LUA代码
ipack =require 'ipack'
local tmetatable = tmetatable
local ByteArray =
{
}
ByteArray.__index = ByteArray
local typeEnum=
{
OP_ZSTRING= 'z',--/* zero-terminated string */
OP_BSTRING= 'p',--/* string preceded by length byte */
OP_WSTRING= 'P',--/* string preceded by length word */
OP_SSTRING= 'a',--/* string preceded by length size_t */
OP_STRING= 'A',--/* string */
OP_FLOAT= 'f',--/* float */
OP_DOUBLE= 'd',--/* double */
OP_NUMBER= 'n',--/* Lua number */
OP_BYTE = 'c',--/* char is byte*/
OP_UBYTE = 'b',--/* byte = unsigned char */
OP_SHORT ='h',--/* short */
OP_USHORT= 'H',--/* unsigned short */
OP_INT = 'i',--/* int */
OP_UINT = 'I',--/* unsigned int */
OP_LONG = 'l',--/* long */
OP_ULONG= 'L',--/* unsigned long */
OP_LITTLEENDIAN= '<',--/* little endian */
德国音乐家
OP_BIGENDIAN= '>',--/* big endian */
OP_NATIVE= '=',--/* native endian */
}
--local OP_ZSTRING= 'z'--/* zero-terminated string */
--local OP_BSTRING= 'p'--/* string preceded by length byte */
--local OP_WSTRING= 'P'--/* string preceded by length word */
-
-local OP_SSTRING= 'a'--/* string preceded by length size_t */
--local OP_STRING= 'A'--/* string */
--local OP_FLOAT= 'f'--/* float */
番茄蛋花汤的做法--local OP_DOUBLE= 'd'--/* double */
--local OP_NUMBER= 'n'--/* Lua number */
--local OP_CHAR = 'c'--/* char */
--local OP_BYTE = 'b'--/* byte = unsigned char */
--local OP_SHORT ='h'--/* short */
--local OP_USHORT= 'H'--/* unsigned short */
--local OP_INT = 'i'--/* int */
--local OP_UINT = 'I'--/* unsigned int */
-
-local OP_LONG = 'l'--/* long */
--local OP_ULONG= 'L'--/* unsigned long */
--local OP_LITTLEENDIAN= '<'--/* little endian */
--local OP_BIGENDIAN= '>'--/* big endian */
--local OP_NATIVE= '='--/* native endian */
--
--@packedStr --已经打包的字节字符串如果是创建写bytearray 此参数不需要传nil
陈怡璇
--@endian --字节序不传默认⼩字节序
--]]
function ByteArray:new(packedStr, endian)
local t = {}
tmetatable(t, lf)
lf.packedStr =packedStr
lf.fmt = {}
lf.data = {}
lf.position = 1
lf.__index = lf
return t
end
--清除数据
--]]
function ByteArray:destroy()
lf.packedStr = nil
lf.fmt = nil
lf.data = nil
end
function ByteArray:readByte()
local val = 0
lf.position, val = ipack.unpack(lf.packedStr, typeEnum.OP_BYTE, lf.position)    return val
end
function ByteArray:writeByte(b)
lf.fmt[#lf.fmt + 1] = typeEnum.OP_BYTE
lf.data[#lf.data + 1] = b
end
function ByteArray:readUByte()
local val = 0
lf.position, val = ipack.unpack(lf.packedStr, typeEnum.OP_UBYTE, lf.position)    return val
end
function ByteArray:writeUByte(b)
lf.fmt[#lf.fmt + 1] = typeEnum.OP_UBYTE
lf.data[#lf.data + 1] = b
end
function ByteArray:readShort()
local val = 0
lf.position, val = ipack.unpack(lf.packedStr, lf.endian .. typeEnum.OP_SHORT, lf.position)    return val
end
function ByteArray:readUshort()
local val = 0
lf.position, val = ipack.unpack(lf.packedStr, lf.endian .. typeEnum.OP_USHORT, lf.position)    return val
end
function ByteArray:writeUShort(h)
lf.fmt[#lf.fmt + 1] = typeEnum.OP_USHORT
lf.data[#lf.data + 1] = h
end
function ByteArray:writeShort(h)
lf.fmt[#lf.fmt + 1] = typeEnum.OP_SHORT
lf.data[#lf.data + 1] = h
end
function ByteArray:readInt()
local val = 0
lf.position, val = ipack.unpack(lf.packedStr, lf.endian .. typeEnum.OP_INT, lf.position)
return val
end
function ByteArray:writeInt(i)
lf.fmt[#lf.fmt + 1] = typeEnum.OP_INT
lf.data[#lf.data + 1] = i
end
function ByteArray:readDouble()
local val = 0
lf.position, val = ipack.unpack(lf.packedStr, lf.endian .. typeEnum.OP_DOUBLE, lf.position)    return val
end
function ByteArray:readUint()
local val = 0
lf.position, val = ipack.unpack(lf.packedStr, lf.endian .. typeEnum.OP_UINT, lf.position)
return val
end
function ByteArray:writeDouble(d)
lf.fmt[#lf.fmt + 1] = typeEnum.OP_DOUBLE
入团演讲lf.data[#lf.data + 1] = d
end
function ByteArray:readString()
local l = lf:readShort()
local val = 0
lf.position, val = ipack.unpack(lf.packedStr, typeEnum.OP_STRING .. l, lf.position)
return val
end
function ByteArray:writeString(s)
lf:writeShort(#s)
lf.fmt[#lf.fmt + 1] = typeEnum.OP_STRING
lf.data[#lf.data + 1] = s
end
--获取打包后的数据 -str
--]]
function ByteArray:getbytesString()
小区物业管理if lf.packedStr and lf.packedStr ~= '' then
return lf.packedStr
el
重力式挡土墙
dian .. at(lf.fmt))
print(unpack(lf.data))
return ipack.dian .. at(lf.fmt), unpack(lf.data))
end
end
return ByteArray
李贺将进酒
使⽤⽅法 特别注意的是 ⼤⼩端问题‘’<‘’ 如果解析失败 换下试试
如果解析数据是从C# 传过到lua的 记得要给数据加上标签[LuaByteBufferAttribute]  否则传过来是个table
local ByteArray=require"ipack/ByteArray"
local ba = ByteArray:new(nil, '<')
ba:writeInt(333300)
ba:writeString('fuck 1334 goddess')
ba:writeShort(44)
ba:writeByte(-3)
ba:writeByte(122)
local s = ba:getbytesString()
print(#s, s)
print('----------------')
关于瀑布的诗local ba2 = ByteArray:new(s, '<')
print(ba:readInt())
print(ba:readString())
print(ba:readShort())
print(ba:readByte())
print(ba:readByte())

本文发布于:2023-07-19 04:29:27,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1087275.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   解析   字节   功能   添加   打包   蛋花汤
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图