Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 十六进制常数=格式错误的数字?_Lua - Fatal编程技术网

Lua 十六进制常数=格式错误的数字?

Lua 十六进制常数=格式错误的数字?,lua,Lua,我有一个Lua脚本,我试图使用十六进制数(0x..)。如果我在控制台中使用官方的Windows二进制文件运行此脚本,它就可以正常工作。但是如果我在我的应用程序(简单dofile)中运行它,我会得到 不管十六进制是什么,我总是得到那个错误,好像它不支持它们。我使用的库是Lua5.1.4,我尝试了两个不同的库(第一个是我自己编译的库),所以这应该不是问题所在 有人知道这里可能出了什么问题吗 编辑: 这不是剧本。不管我做什么,一个简单的“foo=0xf”已经触发了错误,即使文件中没有其他内容 更新:

我有一个Lua脚本,我试图使用十六进制数(0x..)。如果我在控制台中使用官方的Windows二进制文件运行此脚本,它就可以正常工作。但是如果我在我的应用程序(简单dofile)中运行它,我会得到

不管十六进制是什么,我总是得到那个错误,好像它不支持它们。我使用的库是Lua5.1.4,我尝试了两个不同的库(第一个是我自己编译的库),所以这应该不是问题所在

有人知道这里可能出了什么问题吗

编辑:
这不是剧本。不管我做什么,一个简单的“foo=0xf”已经触发了错误,即使文件中没有其他内容

更新:

tonumber("0xf")
这将返回nil,而

tonumber("15")

干得好。我的libs中的hex肯定有问题…

如果hex文本不适合您(尽管它们应该),您可以通过执行
tonumber(“fe”,16)
在不同的编译器中为什么函数必须不同,为什么

好吧,问题是Lua试图在默认情况下将数字转换为double。为此,它使用函数“strtod”,它接受两个参数、字符串和一个字符指针。char指针应该指向解析数字之后的最后一个位置。对于十六进制数,它表示“0”之后的“x”。如果不是这样的话,Lua会假设一个错误,并给我们这个漂亮的小错误消息

我使用DMC编译了Lua,因为我需要lib在OMF中,我假设其他人也使用DMC。但显然DMC的strtod的工作原理不同,因为如果字符串是十六进制的,指针总是指向字符串的开头。。。或者更确切地说是任何无效的数字

我现在添加了一个小的hack,如果转换为double失败,它会检查x。不漂亮,但现在还可以用

int luaO_str2d (const char *s, lua_Number *result) {
  char *endptr;
  *result = lua_str2number(s, &endptr);

  /* Hack for DMC */
  if (endptr == s)
    if(*(s+1) == 'x' || *(s+1) == 'X')
      endptr++;
    else
      return 0; /* conversion failed */

我用lua5.2面对这个bug。Lua 5.1工作正常。

能否在出现此错误的地方显示脚本部分?这不是脚本。不管我做什么,一个简单的“foo=0xf”已经触发了错误,即使文件中没有其他内容。我在上面尝试十六进制数时没有收到错误。试着在那里运行你的代码,它能工作吗?就像我说的,它不是脚本。但是是的,它在那里工作得很好。既然它是和官方口译员一起工作的,我想我尝试使用的LIB肯定有问题。但是我不知道。。。如果我在编译Lua时出错,我可以理解,但毕竟我也尝试过其他lib。Lua使用后端libc解析十六进制字符串。众所周知,一些微软的libc在这方面是一个缺陷,但即使对他们来说,这似乎也有点极端。如果您自己编译过它,您可以尝试在lobject.c中的
luaO\u str2d
处放置一个断点,看看会发生什么。嗯,我的lib现在已经修复了。也许有一天我会把那个坏掉的挖出来,看看这是否管用^^^我想,这应该是一个评论。
int luaO_str2d (const char *s, lua_Number *result) {
  char *endptr;
  *result = lua_str2number(s, &endptr);

  /* Hack for DMC */
  if (endptr == s)
    if(*(s+1) == 'x' || *(s+1) == 'X')
      endptr++;
    else
      return 0; /* conversion failed */