lua-protobuf icon indicating copy to clipboard operation
lua-protobuf copied to clipboard

编码uint64的值时,当值很大时编码失败

Open LorneWin opened this issue 3 years ago • 3 comments

类型定义:

message tianmo_info
{
  optional int32 id           = 1[default = 0];
  optional int32 distance = 2[default = 0];
  optional uint64 hp        = 3[default = 0];
}

测试代码:

local pb = require "pb"
pb.option "decode_default_message" 
pb.option "encode_default_values" 
pb.option "decode_default_array"
local msg = "tianmo_info"
local tianmo = {
    id = 1,
    distance = 100,
    hp = 9372260000000000000,
}
pb.encode(msg, tianmo)

执行出错:


\star_pb.lua:28: integer format error: '9.37226e+18' stack traceback: [C]: in function 'pb.encode' .\star_pb.lua:28: in main chunk [C]: in ?


我追踪到pb.c的代码,lua_tointegerx 返回的是0,转换失败!

LorneWin avatar Jul 28 '22 10:07 LorneWin

请问我该怎么做

LorneWin avatar Jul 28 '22 10:07 LorneWin

Lua只支持有符号64位数,你可以使用字符串"#9...",会自动转成64位数字编码

starwing avatar Jul 29 '22 01:07 starwing

麻烦问一下。大家取int64 值的时候。如何把表示范围外 按string获取到

bugwang avatar Aug 31 '22 10:08 bugwang