Нет. Диапазон 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.