Гуглю на тему независимости от endian. Везде предлагают использовать конверторы по типу htons() etc. Но никак не найду, почему вот такой вариант не будет работать:
//server
void writeInt16(char* buf, int16_t val)
{
buf[0] = (val >> 8);
buf[1] = (val & 0xff);
}
//client
int16_t readInt16(const char* buf)
{
return (buf[0] << 8) + buf[1];
}