1

メッセージング システムである QPID を介して、オブジェクトをシリアル化された文字列として C++ から C# に送信しようとしています。私は現在、次のようなGoogle protoファイルを持っています:

package Serializable;

message Order_ser 
{
    optional  int32 openord = 1 [default = 0];
    optional  int32 oldord = 2 [default = 0]; 
    optional  double price = 3 [default = 0];
}

C++ を介してオブジェクトを転送すると、C# の最後でエラーが発生します

Protocol message tag had invalid wire type.

これは、価格などの double 型に値を割り当てた場合にのみ発生します。

4

2 に答える 2

1

名前にもかかわらず、それがSerializeAsString 実際にテキストに変換されるとは思わないので、C# 側でテキストとして扱うべきではありません。間違っているのは、UTF-8 でエンコードされたテキストとしてのバイナリ データの解釈であると強く疑っています。

私は QPID について何も知りませんが、その方法で任意のバイナリメッセージを転送できると仮定すると、それがあなたがすべきことです。QPID を介して任意のバイナリ メッセージを転送できない場合、Protocol Buffers は適切なソリューションではない可能性があります。実際には、効率的なバイナリ表現として設計されています。もちろん、データを base64 エンコードすることもできますが、もっと適切な方法があることに気付くかもしれません。

于 2013-07-11T03:34:59.970 に答える