Lua C api:处理大量数据

pug*_*tor 5 c lua

我在代码中处理皮秒(数字> 10 ^ 12).
将数据传递给Lua的C代码(atime和eventid都是size_t类型)

lua_getglobal ( luactx, "timer_callback" );
lua_pushunsigned ( luactx, atime );
lua_pushunsigned ( luactx, eventid );
lua_pcall ( luactx, 2, 0, 0 );
Run Code Online (Sandbox Code Playgroud)

Lua功能

function timer_callback(time, eventid)  
  if eventid == TX_CLOCK then
  out_log(tostring(time)) --result is random garbage
  set_callback(time + 1000000000000, TX_CLOCK)
  return
  end  
end
Run Code Online (Sandbox Code Playgroud)

我尝试使用lua_pushnumber,但结果是lua我得到了负数.

ind*_*div 5

Lua,从5.3开始支持lua_Integer,默认为64位.从参考手册:

lua_Integer

typedef ... lua_Integer;

Lua中的整数类型.

默认情况下,此类型为long long(通常为64位二进制补码整数),但可以更改为long或int,通常为32位二进制补码整数.(请参阅luaconf.h中的LUA_INT.)Lua还定义了常量LUA_MININTEGER和LUA_MAXINTEGER,其中包含适合此类型的最小值和最大值.

通过编辑可以相当容易地强制使用Lua 5.2 lua使用不同的数字类型luaconf.h.数字类型定义为LUA_NUMBER.

对于lua 5.1,您可以安装lnum补丁,它将更改整数类型.