Lua中的string.byte函数能否返回负值?
我正在调试其他人的代码。我不太了解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
它似乎不可能返回负值,但我并没有太多地使用它 以下是一些可能有用的文档链接: 否。的范围应为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,然后再转换为整数。这正是我需要的。谢谢!