Lua C api:处理大量数据

时间:2014-09-23 16:30:05

标签: 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 );

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

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

1 个答案:

答案 0 :(得分:5)

Lua,从5.3开始,支持lua_Integer,默认为64位。来自reference manual

  

<强> lua_Integer

     

typedef ... lua_Integer;

     

Lua中的整数类型。

     

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

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

对于lua 5.1,您可以安装lnum补丁,这将改变整数类型。