2014-09-23 63 views
5

我在我的代碼中處理皮秒(數字大於10^12)。
C代碼將數據傳遞到Lua(atime的和事件ID都爲size_t類型的)Lua C api:處理大量數字

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 2014-09-23 16:44:01

+0

我使用5.2下的Win32 – pugnator 2014-09-23 16:45:05

+0

個人,請將您的消息作爲答案。我只是從源代碼構建5.3,重新編譯我的應用程序,所有工作都像一個魅力 – pugnator 2014-09-23 17:01:21

回答

5

Lua自5.3開始支持默認爲64位的lua_Integer。從reference manual

lua_Integer

的typedef ... lua_Integer;

Lua中的整數類型。

默認情況下,這種類型很長(通常是一個64位二補碼整數),但可以更改爲long或int,通常是一個32位二補碼整數。 (請參見luaconf.h中的LUA_INT。) Lua還定義了常量LUA_MININTEGER和LUA_MAXINTEGER,並使用適合此類型的最小值和最大值。

lua 5.2可以通過編輯luaconf.h相當容易地強制使用不同的數字類型。號碼類型定義爲LUA_NUMBER

對於lua 5.1,您可以安裝lnum補丁,它將更改整數類型。