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++ 値: