1

私は次のようなCの構造を持っています:

typedef u_int8_t NN;
typedef u_int8_t X;
typedef int16_t S;
typedef u_int16_t U;
typedef char C;

typedef struct{
 X test;
 NN test2[2];
 C test3[4];
 U test4;
} Test;

次のように、構造体を宣言し、値をフィールドに書き込みました。

Test t;
int t_buflen = sizeof(t);
memset( &t, 0, t_buflen);
t.test = 0xde;
t.test2[0]=0xad; t.test2[1]=0x00;
t.test3[0]=0xbe; t.test3[1]=0xef; t.test3[2]=0x00; t.test3[3]=0xde;
t.test4=0xdeca; 

この構造をUDP経由でサーバーに送信しています。現時点では、ローカルでテストすると問題なく動作しますが、この構造を自分のlittle-endianマシンからマシンに送信する必要がありますbig-endian。これを行う方法がよくわかりません。

使用を検討しましたが、正しく理解していれば、16ビットまたは32ビットhtonsに対してのみ定義されているように見えるため、この状況に適用できるかどうかはわかりません。unsigned ints

4

3 に答える 3

1

ネットワーク経由で送信するデータは、関係するマシンのエンディアンに関係なく同じでなければなりません。あなたが研究する必要があるキーワードはシリアライゼーションです。これは、データ構造を一連のビット/バイトに変換して、ネットワーク経由で送信したり、ディスクに保存したりすることを意味します。これは、アーキテクチャやコンパイラなどに関係なく常に同じです。

于 2013-09-23T14:45:00.590 に答える