2

我想在 c# 和 c++ 中使用 google protobuf。我使用 protobuf-csharp-port 在 c# 中生成代码。c++ 和 c# 中的 protobuf 代码是从同一个 .proto 文件生成的,我设置了相同的对象价值。

C++代码:

GetTokenReq getTokenReq;
getTokenReq.set_account_name("");
getTokenReq.set_login_type(8);
getTokenReq.set_auth_data("");
getTokenReq.set_is_tourist(1);
getTokenReq.set_password(g_strPwd);

c#代码:

GetTokenReq.Builder reqBuilder = new GetTokenReq.Builder();
reqBuilder.SetAccountName(ByteString.CopyFrom("", Encoding.ASCII));
reqBuilder.SetLoginType(8);
reqBuilder.SetAuthData(ByteString.CopyFrom("", Encoding.ASCII));
reqBuilder.SetIsTourist(1);
reqBuilder.SetPassword(ByteString.CopyFrom(g_strPwd, Encoding.ASCII));
GetTokenReq getTokenReq = reqBuilder.Build();

我想将对象序列化为字符串,所以我在 c++ 中使用了 SerializeToString 函数,在 c# 中使用了 WriteTo 函数。像这样:

C++代码:

getTokenReq.SerializeToString(&strBody);

c#代码:

MemoryStream stream = new MemoryStream();
oReq.WriteTo(stream);
byte[] buffer = stream.ToArray();
string strBody = Encoding.ASCII.GetString(buffer);

但是,c++ 中 strBody 的结果与 c# 中的结果不同。为什么以及我该怎么做。 c++ 值:

c#值:

4

0 回答 0