Lua C API:处理大数字

5

我的代码中涉及到皮秒(数字大于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
Lua的哪个版本?5.3支持lua_Integer,默认为64位。 - indiv
我在Win32下使用5.2。 - pugnator
Indiv,请将您的信息作为答案。我刚刚从源代码构建了5.3版本,重新编译了我的应用程序,一切正常运行。 - pugnator
1个回答

5
截至5.3版本,Lua支持默认为64位的lua_Integer。 根据参考手册

lua_Integer

typedef ... lua_Integer;

Lua中整数的类型。

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

Lua 5.2可以通过编辑luaconf.h轻松地强制使用不同的数字类型。 数字类型被定义为LUA_NUMBER

对于Lua 5.1,您可以安装lnum补丁,以更改整数类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接