2014-09-23 37 views
5

Tôi xử lý với pico giây trong mã của tôi (số> 10^12).
C mã để truyền dữ liệu cho Lua (atime và EventID đều là kiểu size_t)Lua C api: xử lý số lớn

lua_getglobal (luactx, "timer_callback"); 
lua_pushunsigned (luactx, atime); 
lua_pushunsigned (luactx, eventid); 
lua_pcall (luactx, 2, 0, 0); 

Lua chức năng

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 

Tôi đã thử với lua_pushnumber nhưng trong kết quả trong lua tôi có số âm.

+1

Phiên bản lua nào? 5.3 hỗ trợ 'lua_Integer', mặc định là 64 bit. – indiv

+0

Tôi sử dụng 5.2 theo Win32 – pugnator

+0

indiv, vui lòng trả lời thư của bạn. Tôi chỉ xây dựng 5.3 từ các nguồn, biên dịch lại ứng dụng của tôi và tất cả đều hoạt động như một sự quyến rũ – pugnator

Trả lời

5

Lua, tính bằng 5.3, hỗ trợ lua_Integer, theo mặc định là 64 bit. Từ reference manual:

lua_Integer

typedef ... lua_Integer;

Loại số nguyên trong Lua.

Theo mặc định, loại này dài (thường là số nguyên bổ sung 64 bit), nhưng có thể thay đổi thành dài hoặc int, thường là số nguyên bổ sung 32 bit. (Xem LUA_INT trong luaconf.h.) Lua cũng xác định hằng số LUA_MININTEGER và LUA_MAXINTEGER, với giá trị tối thiểu và tối đa phù hợp với loại này.

Lua 5.2 lua có thể bị ép buộc sử dụng loại số khác khá dễ dàng bằng cách chỉnh sửa luaconf.h. Loại số được định nghĩa là LUA_NUMBER.

Đối với lua 5.1, bạn có thể cài đặt bản vá lnum, sẽ thay đổi loại số nguyên.

Các vấn đề liên quan