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
Lua中的string.byte函数能否返回负值?_Lua - Fatal编程技术网

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

Lua中的string.byte函数能否返回负值?,lua,Lua,我正在调试其他人的代码。我不太了解Lua。我想知道string.byte是否可以返回负值。它似乎不能返回负值,但是我没有对它进行过太多的研究 以下是一些可能有用的文档链接: 它似乎不可能返回负值,但我并没有太多地使用它 以下是一些可能有用的文档链接: 否。的范围应为0..255(含0..255);文档没有指定,但源代码很清楚: static int str_byte (lua_State *L) { size_t l; const char *s = luaL_checklstrin

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

它似乎不能返回负值,但是我没有对它进行过太多的研究

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


它似乎不可能返回负值,但我并没有太多地使用它

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

否。的范围应为0..255(含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;
}
static int str_字节(lua_State*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;
如果(位置l)姿势=l;
if(posi>pose)返回0;/*空间隔;不返回任何值*/
n=(int)(姿势-posi+1);
if(posi+nNo)。的范围应为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;
}
static int str_字节(lua_State*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;
如果(位置l)姿势=l;
if(posi>pose)返回0;/*空间隔;不返回任何值*/
n=(int)(姿势-posi+1);

如果(posi+n如果您对lua的内部工作有任何疑问,只需检查源代码即可:
(是的,我确实意识到理解这一点需要一些工作;)

如果您对lua内部工作有任何疑问,只需检查源代码即可:
(是的,我确实意识到理解这一点需要一些工作;)

有任何链接或文档需要确认吗?我相信你,因为这可以解释我看到的错误。不过,我想指出一些东西。文档以其简洁而自豪;我将插入str_byte的源代码,你可以看到它在返回值之前先转换为uchar,然后再转换为整数。这正是我需要的。谢谢!有任何链接或文档需要确认吗?我相信你,这可以解释我看到的错误。但是,我想指出一些东西。文档以其简洁而自豪;我将插入str_byte的源代码,你可以看到它在返回值之前先转换为uchar,然后再转换为整数。这正是我需要的。谢谢!