[lua/unity/cocos2dx]关于云风pbc不支持int64的解决办法
来源:互联网 发布:js 获取选中的radio 编辑:程序博客网 时间:2024/06/10 13:54
其实这个很简单,因为源码都有,改改就好,但是估计有些人很担心改了之后出现各种问题解决不了,我通常是先改,出问题再说,哈哈。不过其实去看看源码,云风的代码还是写的很清晰的
以上是废话
找到pbc-lua.c
搜索case PBC_INT64
会发现这里对于int64的处理直接处理成了lua_Number,那么这里就可以根据个人需求来修改了。不过看pbc其他地方的处理,会发现其他地方通过luastring来处理,其实为了减小依赖,这样最方便
大致的代码是这样
case PBC_INT64: {uint64_t v64 = (uint64_t)(v->i.hi) << 32 | (uint64_t)(v->i.low);//lua_pushnumber(L,(lua_Number)(int64_t)v64);//原本的实现lua_pushlstring(L, (const char *)&v64, sizeof(v64));break;}
这里其实就是把值设置到一个table里
废话一下
有些C/C++基础不好的人看到这个就纳闷了,我需要的是int64,你给我弄成字符串是什么意思?
熟悉这些的自然不用解释,如果你注意看就会发现这里没有用sprintf而是直接指针强转。对于直接操作内存的语言来说,其实只要内存的值是一样的,管你是什么类型,类型只是方便操作的工具而已。
问题来了,这样在lua里是用不了的,怎么办?
其实很简单,因为lua51是不支持int64的,那么肯定要自己实现int64的支持,就拿cocos2dx为例,其内置里一个Integer64类,用于lua处理int64
对于cocos2dx,我是这样处理的,找到Integer64.h,在函数toLua_integer64里面加入
static int toLua_Integer64(lua_State* L){int argc = lua_gettop(L);if(argc == 0){return new_Integer64(L,0);}else if (argc == 1){int64_t tmpdata = 0;if (lua_type(L, 1)== LUA_TSTRING) {size_t len = 0;const char * number = lua_tolstring(L, 1, &len);if (len != 8) {return luaL_error(L, "Need an 8 length string for int64");}tmpdata = *(int64_t*)number;}else {tmpdata = (int64_t)lua_tonumber(L, 1);}return new_Integer64(L,tmpdata);}return 0;}
加入pb文件这样定义
mytest{optional int64 value = 1;}
lua那边的使用:
local r = protobuf.decode("mypbtest",databuffer)local v64 = Interger64.new(r.value)print("An int64 value:"..v64)
Unity同理,自己实现一个int64支持就好
0 0
- [lua/unity/cocos2dx]关于云风pbc不支持int64的解决办法
- [lua/unity/cocos2dx]关于云风pbc不支持int64的解决办法 标签: unitycocos2d-xluauluapbc 2017-03-03 16:41 639人阅读 评论(0)
- ocos2dx-lua采用pbc解析protobuf 不支持message嵌套和枚举不支持整数的处理方法
- pbc 库的 lua binding
- pbc 库的 lua binding
- 我的cocos2d-x-3.2集成云风pbc lua binding方法
- 我的cocos2d-x-3.2集成云风pbc lua binding方法
- 我的cocos2d-x-3.2集成云风pbc lua binding方法
- 我的cocos2d-x-3.2集成云风pbc lua binding方法
- cocos2d-x-3.2集成云风pbc lua binding方法
- 关于int64型的说明
- 云峰pbc 库的 lua binding
- skynet中使用云风的pbc
- 关于cocos2dx虚拟摇杆的lua实现
- 关于cocos2dx 3.0+ 的 lua绑定c++
- Cocos2dx lua 关于android打包的批处理
- 在Quick-cocos2dx中使用云风pbc解析Protocol Buffers,支持win、mac、ios、android
- 在Quick-cocos2dx中运用云风pbc解析Protocol Buffers,支持win、mac、ios、android
- 关于c++的引用变量与命名空间
- su与su
- 怎么做产品?
- Linux服务器被入侵和删除木马
- scrapy-redis使用详解
- [lua/unity/cocos2dx]关于云风pbc不支持int64的解决办法
- 笔记on3
- 忘记mysql的密码的解决方法
- GetFileSizeEx 用法
- 我的博客
- APP盈利模式有哪些?
- c语言中关于函数参数中(包含...),占位符。
- Android6.0动态申请SD卡读写的权限
- POJ-2186 Popular Cows,tarjan缩点找出度为0的点。