Может ли функция string.byte в Lua вернуть отрицательное значение? - PullRequest
1 голос
/ 29 декабря 2010

Я отлаживаю чужой код. Я плохо знаю Луа. Я хотел бы знать, возможно ли отрицательное возвращаемое значение даже из string.byte.

Ответы [ 3 ]

3 голосов
/ 29 декабря 2010

Нет. Диапазон 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 голос
/ 29 декабря 2010

Не похоже, что он может возвращать отрицательные значения - однако я мало с этим работал.

Вот некоторые ссылки на документацию, которые могут быть полезны:

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

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

0 голосов
/ 30 декабря 2010

если у вас есть ЛЮБЫЕ вопросы относительно внутренней работы lua, всегда проще всего проверить источник: http://www.lua.org/source/5.1/lstrlib.c.html#str_byte (и да, я понимаю, что понимание этого требует немного работы;))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...