2010-12-29 3 views

답변

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) 1,994에서 2,008 사이 Lua.org; BSD 라이센스에 의한

중요한 것은 호출 함수에 정수 값을 반환하는 데 사용되는 lua_pushinteger와 0..255 범위의 값으로 강제 변환하는 uchar입니다.

+0

모든 링크 나 DOCO를 그걸 확인해 볼까? 나는 당신을 믿습니다. 제가보기에는 그 버그를 설명 할 수 있습니다. 그러나 나는 지적하고 싶은 것이있다. – rfeak

+0

문서는 그 자체의 자부심을 자랑합니다. str_byte에 대한 소스 코드를 삽입합니다. str_byte는 uchar로 변환 된 후 값을 반환하기 전에 정수로 변환되는 것을 볼 수 있습니다. – swdunlop

+0

그게 내가 필요한 것입니다. 고맙습니다! – rfeak

0

당신이 루아 내부 동작에 관한 질문이있는 경우, 그 항상 가장 쉬운 방법은 소스 확인 : http://www.lua.org/source/5.1/lstrlib.c.html#str_byte (그래, 나는이 이해하는 것은 약간의 작업이 필요하다는 것을 깨닫는다;))

관련 문제