其实这个很简单,因为源码都有,改改就好,但是估计有些人很担心改了之后出现各种问题解决不了,我通常是先改,出问题再说,哈哈。不过其实去看看源码,云风的代码还是写的很清晰的
以上是废话
找到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而是直接指针强转。对于直接操作内存的语言来说,其实只要内存的值是一样的,管你是什么类型&