[lua/unity/cocos2dx]关于云风pbc不支持int64的解决办法 标签: unitycocos2d-xluauluapbc 2017-03-03 16:41 639人阅读 评论(0)
2017-08-18 18:16
435 查看
[lua/unity/cocos2dx]关于云风pbc不支持int64的解决办法
标签: unitycocos2d-xluauluapbc2017-03-03 16:41 639人阅读 评论(0) 收藏 举报
分类:
Lua(9)
经验(23)
版权声明:本文为博主原创文章,未经博主允许不得转载。
其实这个很简单,因为源码都有,改改就好,但是估计有些人很担心改了之后出现各种问题解决不了,我通常是先改,出问题再说,哈哈。不过其实去看看源码,云风的代码还是写的很清晰的
以上是废话
找到pbc-lua.c
搜索case PBC_INT64
会发现这里对于int64的处理直接处理成了lua_Number,那么这里就可以根据个人需求来修改了。不过看pbc其他地方的处理,会发现其他地方通过luastring来处理,其实为了减小依赖,这样最方便
大致的代码是这样
[cpp] view
plain copy
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里面加入
[cpp] view
plain copy
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文件这样定义
[plain] view
plain copy
mytest{
optional int64 value = 1;
}
lua那边的使用:
[plain] view
plain copy
local r = protobuf.decode("mypbtest",databuffer)
local v64 = Interger64.new(r.value)
print("An int64 value:"..v64)
Unity同理,自己实现一个int64支持就好
相关文章推荐
- [lua/unity/cocos2dx]关于云风pbc不支持int64的解决办法
- wordpress修改固定链接之后 无法访问的解决办法 标签: WordPress 2015-09-24 14:09 223人阅读 评论(0) 收藏 举报 分类: WordPress(6) 本地同
- error C2039: “create”: 不是“cocos2d::GLView”的成员,出错解决办法 分类: cocos2d代码编写 2015-07-08 20:42 97人阅读 评论(1) 收藏
- Error LNK2001 无法解析的外部符号 的几种情况及解决办法 标签: mfc编译器编程c 2011-08-18 22:48 199753人阅读 评论(10) 收藏 举报 分类: Debug
- 新建cocos2dx开发遇到问题及解决办法 分类: cocos2d安装设置 2015-07-08 21:47 7人阅读 评论(0) 收藏
- vs2012运行cocos2d项目,提示:msvcr120.dll丢失解决办法 分类: cocos2d安装设置 2015-05-14 17:35 116人阅读 评论(0) 收藏
- 关于html5的几个新标签在IE9之前不支持的解决办法
- 关于unity5.2发布ios版本不支持ipv6网络-解决办法,升级版本
- Android MediaPlayer播放prepareAsync called in state 8解决办法 分类: Android多媒体 2015-01-08 10:16 54人阅读 评论(0) 收藏
- 调试MVC源代码时"[A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转换为 ..."解决办法 分类: ASP.NET MVC 2012-12-09 10:49 6506人阅读 评论(3) 收藏
- iOS tableViewCell plane格式下,接近section边缘不显示分割线却被复用解决办法 分类: ios技术 2015-06-12 16:19 136人阅读 评论(0) 收藏
- 关于ubuntu网卡支持问题的解决办法
- MySQL添加新用户、为用户创建数据库、为新用户分配权限 标签: MySQL 2016-12-17 16:41 2768人阅读 评论(0) 收藏 举报 分类: =======学习心得=======
- 关于 “请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库” 出错解决办法
- 用C求解一元二次方程的解,遇到的问题及解决办法 分类: C语言 2012-03-13 00:26 3094人阅读 评论(0) 收藏
- Android 代码混淆exception解决办法 分类: Android安装及配置 2014-12-18 21:38 129人阅读 评论(0) 收藏
- 关于Android 5.1限制外置SD卡写入权限的破解方法 标签: Android 5.1SD卡写入权限 2017-06-15 10:06 1374人阅读 评论(0) 收藏 举报 版权声明:本文为
- TinyXML不支持UNICODE的解决方法【改造TinyXML】 分类: C/C++ 2012-04-08 10:01 14278人阅读 评论(6) 收藏 举报 encodingmicrosoftb
- 关于使用struts2标签页面显示不对齐的解决办法
- 调试MVC源代码时"[A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转换为 ..."解决办法 分类: ASP.NET MVC 2012-12-09 10:49 6506人阅读 评论(3) 收藏