問題タブ [protobuf-c]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - Protobuf 3.0.0-alpha1 を Windows にインストールします。ウイルス?
MSYS と MinGW を使用して Windows に protobuf 3.0.0-alpha1 をインストールしようとしたところ、C コンパイラが動作するかどうかのチェックに失敗しました。毎回失敗するのと同じように、ノートンの自動ブロック ウィンドウが表示され、a.exe が SAPE.heur.3161 ウイルスを含んでいるためブロックされたと表示されます。
誰でもこれについて何をすべきか知っていますか?
c++ - Protobuf : 内部にヌル文字を含む C++ 文字列
protobuf として読み取られているメモリ内のバッファーを扱っています。私はそれを逆シリアル化する必要があります。この protobuf のコンテンツには、文字列内に null 文字がある場合とない場合がある文字列が含まれています。たとえば、文字列は "name\0first" のようになります。このような入力がある場合、文字列クラスはヌル文字の後の部分を削除するため、デシリアライズできる文字列は常に「名前」のように見えます。
この場合、完全な文字列にアクセスするにはどうすればよいですか? この場合、文字列長関数は明らかに役に立ちません。
protocol-buffers - protobuf サービス メソッドはプリミティブ型を返すことができますか?
Google protobuf を使用しようとしていますが、次の説明があります。
message.protoファイル:
service.protoファイル:
C++ ソースを生成しようとすると、エラーが発生します。
$ protoc service.proto --cpp_out=/tmp/proto/build
service.proto:4:40: 予期されるメッセージ タイプです。
ユーザー定義型のみを返す必要がありますか? プリミティブ (bool
や などstring
) はサポートされていますか? Request
(私の例ではなく) プリミティブ型をサービス メソッドの引数として使用できますか?
c++ - 固定サイズのバイト バッファの連続したチャンクからの protobuf メッセージのシーケンスを解析する
私は C++ に関する知識が乏しいため、これに 2 日間苦労しました。私がする必要があるのは、protobuf C++ API を使用して、何百万ものメッセージを含む可能性のある大きなファイルから一連のメッセージを解析することです。この投稿で説明されているように、いつでも「ReadVarInt32」を実行してサイズを取得し、CodedInputStream にプッシュされた制限で ParseFromCodedStream を実行できるため、ファイルから直接読み取るのは簡単です。ただし、私が使用している I/O レベルの API (実際には libuv) では、読み取りコールバック アクションごとに固定サイズのバッファーを割り当てる必要があります。どうやらそのブロックサイズは、私が読んでいるメッセージサイズとは何の関係もありません。
これは私の人生を困難にします。基本的に、ファイルから読み取り、固定サイズのバッファー (16K など) を埋めるたびに、そのバッファーにはおそらく数百の完全な protobuf メッセージが含まれますが、そのバッファーの最後のチャンクは不完全なメッセージになる可能性があります。それで、私がすべきことは、できる限り多くのメッセージを読み取ろうとすることであり、最後に、最後のチャンクを抽出して、読み取った次の 16K バッファの先頭にアタッチし、EOF に到達するまで続けます。ファイル。ReadVarInt32() を使用してサイズを取得し、その数値を残りのバッファー サイズと比較します。メッセージ サイズが小さい場合は、読み取りを続けます。
GetDirectBufferPointerという API があるので、これを使用して、次のメッセージのサイズを読み取る前にポインターの位置を記録しようとします。ただし、エンディアンの奇妙さのために、ポインターが開始して次のチャンクにアタッチする場所からバイト配列の残りを抽出するだけでは、Parse は成功せず、実際には最初の数バイト (8 だと思います) が完全に台無しになっていると思われます。 .
あるいは、codedStream.ReadRaw() を実行して残りのストリームをバッファーに書き込み、新しいチャンクの先頭にアタッチすると、データが破損することはありません。しかし問題は、今回は「ReadVarInt32」で既に「読み取られている」ため、「サイズ」バイト情報が失われることです! そして、前回読んだサイズ情報を覚えていて、次の反復 message.ParseFromCodedStream() で直接呼び出しても、1 バイト少なくなり、一部が破損してオブジェクトを正常に復元できません。
私は今、本当に考えがわかりません。固定サイズの中間バッファーをまったく必要とする API で protobuf を適切に使用することさえ可能ですか? ご意見をお寄せいただきありがとうございます。
json - JSONへの.Netプロトコルバッファ、JsonFormatReaderクラスは最も外側の中括弧を処理しませんか?
protobuf-csharp-port ライブラリ ( https://code.google.com/p/protobuf-csharp-port/ )を使用して、Google Protocol Buffers の使用に取り組んでいます。Google.ProtocolBuffers.Serialization クラスにはJsonFormatReader
/JsonFormatWriter
クラスがあります。それらを使用すると、JSON ドキュメントに開始中括弧と終了中括弧を配置しません。また、開始中括弧と終了中括弧を追加すると、記述した同じドキュメントを読み取ることもできません。
たとえば、Calling
作成するもの:
解析しようとすると
使用して
私は以下を取得します:
{ } がないのはなぜですか? これは有効な JSON ですか?
cmake - Cmake エラー ビルド ライブラリ
シンプルな Protobuf-C lib を作成します。それをlibにコンパイルしている間、次のエラーがあります:
CMakeLists.txt
libのビルドを手伝ってください。githubリポジトリブランチに配置された私のリポジトリは開発します
c++ - mbed LPC1768 arm-none-eabi-g++ 用の protobuf-c、libprotobuf-c をビルドします。
mbed プラットフォーム用に libprotobuf-c をビルドしようとしていますが、./configure 設定に問題があります。もっとコンパイル フラグが必要だと思いますが、何を含めればよいかわかりません。どんな助けでも大歓迎です。ありがとう!