>>280=285
まず、構造体のアライメントを調べたか?

送信側のマシン・・・アライメント4byte
struct X {
char a; // 1byte + 3byte(4byteになるよう調整)
long b; // 4byte
} x;

sizeof(x) = 8


受信側のマシン・・・アライメント2byte
struct X {
char a; // 1byte + 1byte
long b; // 4byte
} x;

sizeof(x) = 6

これでは受信側は混乱する。

(char *)で宣言するのは全く問題ない。malloc等でメモリを確保していれば。