I think that there can be two problems depending on how you send this data over TCP.
1: Endianness
, , - . , htons ntohs . htonl .
Endianness . . 2- , , , .
, - ...
Sender:
-------
t.test = 0xde;
t.test2[0] = 0xad; ...
t.test3[0] = 0xbe; ...
t.test4 = htons(0xdeca);
...
sendto(..., &t, ...);
Receiver:
---------
recvfrom(..., &t, ...);
t.test4 = ntohs(0xdeca);
htons() ntohs(), Ethernet... big endian. t.test4, big-endian (ntohs() noop ).
...

htons() , . ...

Sender:
-------
uint8_t buffer[SOME SIZE];
t.test = 0xde;
t.test2[0] = 0xad; ...
t.test3[0] = 0xbe; ...
t.test4 = 0xdeca;
buffer[0] = t.test;
buffer[1] = t.test2[0];
buffer[7] = t.test4 & 0xff;
buffer[8] = (t.test4 >> 8) & 0xff;
...
sendto(..., buffer, ...);
Receiver:
---------
uint8_t buffer[SOME SIZE];
recvfrom(..., buffer, ...);
t.test = buffer[0];
t.test2[0] = buffer[1];
t.test4 = buffer[7] | (buffer[8] << 8);
, - , .
, , ...
2:
" : " - ..
, , - . , , , ...
struct
{
uint8_t v1;
uint16_t v2;
}
v2 1 , 2 , 4 ( ). , .
, 1 16- . , v2 . ? 2 h/w.
struct
{
uint8_t v1;
uint8_t invisible_padding_created_by_compiler;
uint16_t v2;
}
, , . , , / . .