Lua中的string.byte函数能否返回负值?

时间:2010-12-29 18:56:31

标签: lua

我正在调试其他人的代码。我不太了解Lua。我想知道是否可以从string.byte中获得负的返回值。

3 个答案:

答案 0 :(得分:3)

没有。 string.byte( )的范围应为0..255;文档没有指定,但源代码是明确的:

static int str_byte (lua_State *L) {
  size_t l;
  const char *s = luaL_checklstring(L, 1, &l);
  ptrdiff_t posi = posrelat(luaL_optinteger(L, 2, 1), l);
  ptrdiff_t pose = posrelat(luaL_optinteger(L, 3, posi), l);
  int n, i;
  if (posi <= 0) posi = 1;
  if ((size_t)pose > l) pose = l;
  if (posi > pose) return 0;  /* empty interval; return no values */
  n = (int)(pose -  posi + 1);
  if (posi + n <= pose)  /* overflow? */
    luaL_error(L, "string slice too long");
  luaL_checkstack(L, n, "string slice too long");
  for (i=0; i<n; i++)
    lua_pushinteger(L, uchar(s[posi+i-1]));
  return n;
}

来自lua-5.1.4/src/strlib.c,(C)1994-2008 Lua.org;通过BSD许可证

重要的一行是对lua_pushinteger的调用,它用于向调用函数返回一个整数值,而uchar将该值强制转换为0..255范围内的值。

答案 1 :(得分:1)

它似乎不会返回负值 - 但是我没有多少工作。

以下是一些可能有用的文档链接:

http://lua-users.org/wiki/StringLibraryTutorial

http://www.lua.org/manual/5.1/manual.html

答案 2 :(得分:0)

如果您对lua内部工作有任何疑问,最简单的方法就是检查来源:http://www.lua.org/source/5.1/lstrlib.c.html#str_byte (是的,我确实意识到理解这需要一些工作;))