Lua C API:处理大数 Lua 语言支持任意大小的整数和浮点数,并提供了一组 C API 使开发者可以在 C 语言中使用这些数值。这些 C API 也允许开发者处理特别大的数值,例如超出 C 语言内置类型所支持的范围的整数。在 Lua 中,这些大数类型被称为 bignums。要使用 bignums,开发者需要使用 lua_pushinteger 或 lua_pushnumber 函数将这些数值推入 Lua 栈。 在 C 语言中,开发者可以使用 lua_isinteger 和 lua_tointegerx 函数检查和获取整数类型的值,并使用 lua_isnumber 和 lua_tonumberx 函数检查和获取浮点数类型的值。当处理 bignums 时,开发者需要注意,Lua 5.4 及更高版本引入了一个新的类型 __int128,用于表示大于 64 位的整数。在上述版本中,使用 lua_tointegerx 函数从栈中读取 bignums 仍然会返回 64 位整数类型,但使用 lua_tointegerfunction 函数则会返回 __int128 类型。要使用 __int128,开发者需要在编译时使用 -DLUA_USE_C89 宏定义建立 C89 环境。 总之,Lua C API 提供了一组灵活的函数使开发者可以轻松处理大数。
2014-9-23 16:30:5
收藏:0
阅读:107
评论:1
我在我的代码中处理皮秒(数字大于 10^12)。
C 代码将数据传递给 Lua(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 中得到了负数。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
Lua 5.3 支持
lua_Integer,默认为 64 位。来自 参考手册:Lua 5.2 可以通过编辑
luaconf.h来将 Lua 强制转换为不同的数字类型。数字类型被定义为LUA_NUMBER。对于 lua 5.1,可以安装 lnum 补丁来修改整数类型。