我尝试将字符串从 Lua(5.1.5) 转换为整数,并检查该数字是否为有效整数 (0~99999)。但是,我发现 lua_tonumber() 在处理大整数时的行为与 lua_tointeger() 不同。
int main()
{
int in;
double db;
lua_State* Lua = luaL_newstate();
luaL_openlibs(Lua);
lua_pushstring(Lua, "213232127162767162736718238168263816873");
db = lua_tonumber(Lua, -1);
in = lua_tointeger(Lua, -1);
printf("DOUBLE:%f\n", db); // DOUBLE:213232127162767176000119210017101447168.000000
printf("INT:%d\n", in); // INT:0
};
如果我使用 lua_tointeger(),它会返回 0 并通过我的检查。
我检查了两个 API 描述,但我仍然不知道为什么它们有不同的行为。这些行为是否与机器无关?使用 lua_tonumber() 是更好的方法吗?
我可以使用以下代码检查结果吗?(跨平台)
if (!lua_isnumber(Lua, -1)) { //error }
result = lua_tonumber(Lua, -1);
if (result < 0 || result > 99999) { // error2 }
// pass