starwing / lua-protobuf

A Lua module to work with Google protobuf
MIT License
1.75k stars 387 forks source link

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

Open sayysc opened 2 years ago

sayysc commented 2 years ago

类型定义:

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,转换失败!

sayysc commented 2 years ago

请问我该怎么做

starwing commented 2 years ago

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

bugwang commented 2 years ago

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