-2

UDP 経由で送信する前に、バイナリ文字列をつなぎ合わせたいと考えています。これは、非常に小さな Linux コンピューターで C で実行されます。BinaryWriterC# でこれを行うために a を使用する方法と同様に、C でこれを行う方法が存在することを願っています。int を 4 バイトとして char 配列の最後にプッシュしたり、別の文字列をすべて最後にプッシュしたり、2 バイトの short をプッシュしたりできることを望んでいます。

私は C をよく知りません。Google で何かを検索すると、常に C++ が表示されますが、コンパイルするベクトルまたは文字列ストリーム (sstream?) を取得できません。それは単に宣言されていないと言っています。

コンパイル方法:

gcc -o test test.c

UDPポート経由で送信char*する場所に渡す前に、すべてを構築する必要があります。sendto

4

1 に答える 1

0

バッファを作成し、それを埋めるように配列を歩くことができます。int を入れたい場合は、ポインタをキャストするか使用memcpy()してから、書き込み後に walker (ポインタ) を、書き込まれたもののサイズだけインクリメントします。 . 難しいのは、正しいサイズとしてそれを読み取ることですが、注文が何らかのプロトコルによって禁止されている場合 (おそらくあなたが決める)、それを回復することができます. 例えば:

void* buffer = malloc(1500);
void* walker = buffer;
uint32_t myVal = htonl(31415);
memcpy(walker, &myVal, sizeof(myVal);
walker += sizeof(myVal);

また、このタイプのシナリオの送信者と受信者がエンディアン スキーム (ビッグ エンディアンまたはリトル エンディアン [または変換]) を共有していることを確認する必要があることに注意してください。これは、ホスト固有の形式とネット ニュートラル バージョンの間で数値を変換するntohs()や などの関数を使用することで解決できます。htons()

于 2013-10-31T20:17:05.127 に答える