Closed yiyucyp closed 6 years ago
遇到一个比较奇怪的BUG,解析的数据与nodejs的不一致,但是nodejs的两种数据都能decode,pb不行 protoc:load([[ message login_test_res{ repeated int32 r = 1; } ]])
print(pb.tohex(pb.encode("login_test_res", {r = {1,2000}}))) --打印数据为08 01 08 D0 0F local backp1 = pb.decode("login_test_res", "\8\1\8\208\15") --所以上面的数据能正常decode --下面的数据为JS中解出来数据 local backp = pb.decode("login_test_res", "\10\3\1\208\15")
--JS中的测试如下 proto.load("login.proto", function(err, root){ if (err) throw err;
const Login = root.lookupType("login_test_res"); let message = Login.create( { "r":[1, 2000] } ) let buf = Login.encode(message).finish(); console.log(`login:$s`, buf.toString("hex")); //buf的数据为login:$s 0a0301d00f,也就是10,3,1,208,15 var arr = new Array(8,1,8,208,15); var msg = Login.decode(arr)//lua encode后的数据正常解析出 var msg1 = Login.decode(new Array(10,3,1,208,15))// JS自身的数据正常解析出 //但是最终这个数据在lua中不能正常decode出来
})
发现是[packed=true]这个相关,加上后pb的结果就是10,3,1,208,15
你要看你js是不是默认proto3,proto3是默认packed的,看#16
遇到一个比较奇怪的BUG,解析的数据与nodejs的不一致,但是nodejs的两种数据都能decode,pb不行 protoc:load([[ message login_test_res{ repeated int32 r = 1; } ]])
print(pb.tohex(pb.encode("login_test_res", {r = {1,2000}}))) --打印数据为08 01 08 D0 0F local backp1 = pb.decode("login_test_res", "\8\1\8\208\15") --所以上面的数据能正常decode --下面的数据为JS中解出来数据 local backp = pb.decode("login_test_res", "\10\3\1\208\15")
--JS中的测试如下 proto.load("login.proto", function(err, root){ if (err) throw err;
})
发现是[packed=true]这个相关,加上后pb的结果就是10,3,1,208,15