Lua - lua_tostring() 返回奇怪的结果

让我们看下面的代码:

lua_pushinteger( m_pLuaState, 123 );
const char * sAsString = lua_tostring( m_pLuaState, -1 );

它返回指向字符串的非空指针,这些字符串包含类似于"17137503626592379""14326121113845883"等奇怪的数字值。 它似乎是随机的,并不违反内存(至少在几次尝试中是这样),并且返回的字符串总是包含有效的数字值,尽管它们并不是我最初传递的值(即123)。 我认为这与浮点数/整数转换有关。 我使用的是Lua 5.3.2,它支持"整型"和"浮点数"作为"number"的两个子类型,我使用浮点数表示数字和整数表示整数。 我同时在 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导致的。这可能是由于这个原因吗?我将尝试重新编译...

还可能是由于其他原因吗?谢谢。

点赞
用户6094551
用户6094551

我回答了,因为我不能评论,但是我在你的代码中看到了一些问题。

lua_pushinteger( m_pLuaState, 123 );
const char * sAsString = lua_tostring( m_pLuaState, -1 );

你正在推送一个整数并获取一个字符串,由于它们是不同的数据类型,我认为产生奇怪的输出是正常的。我猜它试图把堆栈中的整数转换为字符串。

2016-03-30 15:30:42
用户1560774
用户1560774

Well after recompiling the lua53.lib once the types to be used for integer and floats were defined, it works properly.

The problem is that I changed these types without recompiling the library. The Windows desktop version was initially compiling using doubles instead of floats. I guess this is the origin of the problem.

翻译:


在一次重新编译 lua53.lib 定义整数和浮点数类型后,它能正常工作。

问题是,我在没有重新编译库的情况下更改了这些类型。Windows 桌面版最初是使用双精度浮点数来编译的。我想这就是问题的起源。

2016-03-30 15:38:16