Closed aftermisak closed 7 years ago
发现问题的代码在 lsproto.c -> static int encode(const struct sproto_arg *args) 中对SPROTO_TINTEGER的处理
lua_Integer v; lua_Integer vh; int isnum; if (args->extra) { // It's decimal. lua_Number vn = lua_tonumber(L, -1); v = (lua_Integer)(vn * args->extra + 0.5);
这样比如我用integer(2)发送一个80,000,000, 会导致v最终是一个负数。 建议将v改为int64_t类型,这样兼容的范围更宽泛,只要不要用什么integer(6) 发送上亿的数据...
int64_t v; v = (int64_t)(vn * args->extra + 0.5);
发现问题的代码在 lsproto.c -> static int encode(const struct sproto_arg *args) 中对SPROTO_TINTEGER的处理
lua_Integer v; lua_Integer vh; int isnum; if (args->extra) { // It's decimal. lua_Number vn = lua_tonumber(L, -1); v = (lua_Integer)(vn * args->extra + 0.5);
这样比如我用integer(2)发送一个80,000,000, 会导致v最终是一个负数。 建议将v改为int64_t类型,这样兼容的范围更宽泛,只要不要用什么integer(6) 发送上亿的数据...
int64_t v; v = (int64_t)(vn * args->extra + 0.5);