lua-protobuf
lua-protobuf copied to clipboard
pb.encode double/float 类型数据,在C++里ParseFromString会有问题。
lua代码:
protoc:load([[
syntax = "proto3";
message TestNumber {
double a = 1;
float b = 2;
int32 c = 3;
}
]])
local tt = {
a = 100,
b = 200,
c = 300
}
local s = pb.encode("TestNumber", tt)
PBTestNumber(s)
C++代码:
int PBTestNumber(lua_State* L) {
string s = lua_tostring(L, 1);
TestNumber* msg = new TestNumber();
msg->ParseFromString(s);
std::cout << "in PBTestNumber msg=" << msg->ShortDebugString() << std::endl;
return 0;
}
这里输出的是:in PBTestNumber msg=c: 300
我感觉ParseFromString有问题,得到的是二进制数据,你没取长度会在0的地方截断
我感觉ParseFromString有问题,得到的是二进制数据,你没取长度会在0的地方截断
用ParseFromArray,改成下面这样就ok了。多谢大佬。
int PBTestNumber(lua_State* L) {
size_t len;
const char* s = lua_tolstring(L, 1, &len);
TestNumber * msg = new TestNumber();
msg->ParseFromArray(s, len);
std::cout << "in PBTestNumber msg=" << msg->ShortDebugString() << std::endl;
return 0;
}