我正在调试其他人的代码。我不太了解Lua。我想知道是否可以从string.byte中获得负的返回值。
答案 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)
答案 2 :(得分:0)
如果您对lua内部工作有任何疑问,最简单的方法就是检查来源:http://www.lua.org/source/5.1/lstrlib.c.html#str_byte (是的,我确实意识到理解这需要一些工作;))