【发布时间】:2014-12-25 17:46:43
【问题描述】:
我有一个 Lua 脚本,我正在尝试使用十六进制数字 (0x..)。如果我在控制台中使用官方 Windows 二进制文件运行此脚本,它可以正常工作。但是如果我在我的应用程序中运行它(简单的 dofile),我会得到
malformed number near '0x1F'
十六进制是什么并不重要,我总是得到那个错误,就好像它不支持它们一样。我使用的库是 Lua 5.1.4,我尝试了 2 个不同的库(第一个是我自己编译的),所以这应该不是问题。
有人知道这里可能出了什么问题吗?
编辑: 这不是剧本。无论我做什么,一个简单的“foo = 0xf”都会触发错误,即使文件中没有其他内容。
更新:
tonumber("0xf")
这将返回 nil,而
tonumber("15")
工作正常。我的库中的十六进制肯定有问题...
【问题讨论】:
-
您能否在出现此错误的地方显示您的脚本部分?
-
不是脚本。不管我做什么,一个简单的“foo = 0xf”已经触发了错误,即使文件中没有其他内容。
-
在ideone.com/Mo0nP 上尝试十六进制数字时没有出错。尝试在那里运行你的代码,它有效吗?
-
就像我说的,这不是脚本。但是,是的,它在那里工作得很好。而且由于它与官方解释器一起工作,我想我尝试使用的库一定有问题。但是我不知道是什么......如果我在编译Lua时出错了我可以理解,但毕竟我也尝试过其他库。
-
Lua 使用后端 libc 来解析十六进制字符串。众所周知,一些 Microsoft libcs 在这方面存在缺陷,但即使对他们来说,这似乎也有点极端。如果你自己编译过,你可以尝试在 lobject.c 中的
luaO_str2d处设置一个断点,看看会发生什么。
标签: lua