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