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

pb.encode double/float 类型数据,在C++里ParseFromString会有问题。

Open hz-bin opened this issue 1 year ago • 2 comments

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

hz-bin avatar Jan 04 '24 06:01 hz-bin

我感觉ParseFromString有问题,得到的是二进制数据,你没取长度会在0的地方截断

starwing avatar Jan 06 '24 03:01 starwing

我感觉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;
}

hz-bin avatar Jan 07 '24 10:01 hz-bin