table特性
table是一个“关联数组”,数组的索引可以是数字或者是字符串,所有索引值都需要用 "["和"]" 括起来;如果是字符串,还可以去掉引号和中括号; 即如果没有[]括起,则认为是字符串索引
table 的默认初始索引一般以 1 开始,如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编;
table 的变量只是一个地址引用,对 table 的操作不会产生数据影响
table 不会固定长度大小,有新数据插入时长度会自动增长
table 里保存数据可以是任何类型,包括function和table;
table所有元素之间,总是用逗号 "," 隔开;
引言
因为在游戏公司做web后台开发,经常会涉及到取游戏服务器的数据库里面读写各种操作。
昨天下午,服务器那边让我读一个配置显示到后台,让运营大佬们可以在web后台配置游戏参数。
本来以为很简单个事情,结果我读出那个二进制的字段,居然是这种格式
{1=0,2=0,3=0,4=2,5={},6=0,7={1=118,s010GameConfig={s008wPayType=0,s009wCostType=0,s015dwReservedRule3=3,s015dwReservedRule2=0,s006ClubId=0,s010wCostValue=0,s010wCellScore=1,s014wPlayCountRule=10,s013wHadPlayCount=0,s010dwPlayRule=0,s010wSubGameID=114,s009wMaxScore=0,s015dwReservedRule1=0,s015sPrivateTableID=0}
服务器的兄弟告诉我,这是lua的table。。。很简单啦,就这样。。。(此处省略几百字)
然后我
然后我在网上搜索有么有前辈大佬留下的现成轮子。。。结果不是要加载一个lua vm的虚拟机库就是各种麻烦还不知道能不能解决的一些方案。。。。
博主好歹也是有四年+工作经验的人了,没有合适的就自己写嘛,就当锻炼一下自己咯
新建一个项目,取了一个好听的名字SharpluaTable
class SharpluaTable { string luatable = ""; //从{开始解析 //然后按等号分割,等号前后为一个键值对 //逗号之后,为另一个键值对 //如果遇到中途遇到{,一直解析到}为止,都为值 Dictionary<string, string> dic = new Dictionary<string, string>(); public Dictionary<string, string> Parse(string luatable) { this.luatable = luatable; //解析0位和最后一位,判断是否是luatable格式 if (luatable[0] != '{') { throw new Exception("解析lua失败,格式错误"); } if (luatable[luatable.Length - 1] != '}') { throw new Exception("解析lua失败,格式错误"); } string luaKey = string.Empty, LuaValue = string.Empty; //标示解析Key还是Value,如果true,那么解析到Key里面,如果是false,那么解析到value里面 bool iskey = true; for (int i = 1; i < luatable.Length; i++) { //如果是最后一个键值对,那么直接就完了 if (i+1==luatable.Length&&luatable[i]=='}') { dic.Add(luaKey, LuaValue); luaKey = string.Empty; LuaValue = string.Empty; break; } //如果是逗号,那么存储当前的key value ,跳过当前字符解析 if (luatable[i] == ',') { dic.Add(luaKey, LuaValue); luaKey = string.Empty; LuaValue = string.Empty; iskey = true; //跳过一个逗号,那么继续解析为key continue; } else { if (luatable[i] == '=') { iskey = false; //如果是等号,那么解析为key,并跳过当前 continue; } //如果是二级的{,那么解析到}为止,并把当前的i的值移动到}的下标位置 if (luatable[i] == '{') { //LuaValue += luatable[i]; int kuohaoCount = 0; for (int j = i; j < luatable.Length; j++) { LuaValue += luatable[j]; if (luatable[j]=='{') { kuohaoCount += 1; } if (luatable[j]=='}') { kuohaoCount -= 1; if (kuohaoCount==0) { i = j; break; } else { //kuohaoCount -= 1; } } } } else { if (iskey) { luaKey += luatable[i]; } else { LuaValue += luatable[i]; } } } } return dic; }
目前前这个解析类只做了一层解析,如果value值有多层级,我默认把它解析到value里面
测试一下
string luatable = "{1=0,2=0,3=0,4=2,5={},6=0,7={1=118,s010GameConfig={s008wPayType=0,s009wCostType=0,s015dwReservedRule3=3,s015dwReservedRule2=0,s006ClubId=0,s010wCostValue=0,s010wCellScore=1,s014wPlayCountRule=10,s013wHadPlayCount=0,s010dwPlayRule=0,s010wSubGameID=114,s009wMaxScore=0,s015dwReservedRule1=0,s015sPrivateTableID=0},s006GameID=114},8=1}"; SharpluaTable lua = new SharpluaTable(); var dic = lua.Parse(luatable); Console.WriteLine(dic["7"]); SharpluaTable luaitem = new SharpluaTable(); var items = luaitem.Parse(dic["7"]);
如果有多层级的,那就再new一个SharpLuaTable对象,再进行一次解析就好了
已经提交到Nuget上了,有需要使用大兄弟可以直接命令
Install-Package LuaTableToCSharp -Version 1.0.3
代码提交到了github,:https://github.com/QingChengCoder/LuaTableToCSharp,大家也可以本地下载
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]