4

何よりもまず、この特定のケースではJSONとXMLはオプションではないため、提案しないでください。これがその事実を受け入れやすくするなら、私が独学のために車輪の再発明をするつもりであると想像してください。

要点に戻る:

私が書いた特定のダムサーバーに送信するいくつかのデータグラムをエンコードするために、バイナリセーフなデータ形式を設計する必要があります(それが重要な場合はCで)。

質問を単純化するために、数値、文字列、配列のみを送信しているとしましょう。

重要な事実:サーバーはUnicodeなどについて何も知りません(そして知らないはずです)。すべての文字列をバイナリブロブとして扱います(内部を調べることはありません)。

私が最初に考案したフォーマットは次のとおりです。

  • データグラム:<Number:size>\n<Value1>...<ValueN>
  • 価値:
    • 番号:N\n<Value>\n
    • 弦:S\n<Number:size-in-bytes>\n<bytes>\n
    • 配列:A\n<Number:size>\n<Value0>...<ValueN>

例:

[ 1, "foo", [] ]

次のようにシリアル化します。

1; データグラム内のアイテムの数
A;  -  配列  - 
3; 配列内のアイテムの数
N;  -  番号  - 
1; 数値
S;  -  ストリング  - 
3; 文字列サイズ(バイト単位)
foo; 文字列バイト
A;  -  配列  - 
0; 配列内のアイテムの数

問題は、JavaScriptで文字列サイズをバイト単位で確実に取得できないことです。

したがって、問題は、文字列をJSに保存し、Cに適切にロードできるようにフォーマットを変更する方法です。

サーバーにUnicodeサポートを追加したくありません。

そして、私はサーバー上で文字列をデコードしたくありません(たとえば、base64から、または単に\ xNNシーケンスをエスケープ解除するために)—これには、動的文字列バッファーでの作業が必要になります。

手がかりはありますか?

4

1 に答える 1

1

プレーンCでUTF-8を読むことは、結局それほど怖くないようです。そのため、UTF-8文字列をネイティブに処理するようにプロトコルを拡張しています。(しかし、現状ではこの質問への回答をいただければ幸いです。)

于 2011-04-01T19:01:28.570 に答える