请使用以下代码:
lua_pushinteger( m_pLuaState, 123 );
const char * sAsString = lua_tostring( m_pLuaState, -1 );
返回包含奇怪数值的字符串的非NULL指针,如"17137503626592379"
或"14326121113845883"
等...
似乎随机,不违反内存(至少在几次尝试中),并且返回的字符串总是包含有效的数值,尽管不是我首先传递的那个(即123)。
我认为这与浮点/整数转换有关。
我正在使用Lua 5.3.2
,它支持“integer”和“float”作为“number”的两个子类型,我使用float作为数字,int使用int作为整数。
我正在使用Windows CE和Windows 7.在两个平台上,“int”和“float”都是32位,尽管我的Windows 7是64位,因为我明确地编译了x86。
这是我的一块luaconf.h
#if !defined(LUA_INT_TYPE)
#define LUA_INT_TYPE LUA_INT_INT
#endif
#if !defined(LUA_FLOAT_TYPE)
#define LUA_FLOAT_TYPE LUA_FLOAT_FLOAT
#endif
在写这篇文章时,我意识到这可能是因为我改变了所使用的类型,而没有重新编译我正在链接的静态lua .lib。这可能是由于这个原因吗?我会尝试重新编译...
这可能是由于其他原因吗?谢谢。
答案 0 :(得分:2)
一旦定义了用于整数和浮点数的类型,重新编译lua53.lib后,它就能正常工作。
问题是我在不重新编译库的情况下更改了这些类型。 Windows桌面版本最初使用双精度而不是浮点数进行编译。我想这就是问题的根源。
答案 1 :(得分:0)
我回答,因为我无法发表评论,但我在你的代码中看到的内容。
lua_pushinteger( m_pLuaState, 123 );
const char * sAsString = lua_tostring( m_pLuaState, -1 );
你正在推动整数和拉一个字符串,因为它们是不同的数据类型,我认为它给你有趣的输出是正常的。我想这是试图将堆栈的信息从整数转换为字符串。