Я хочу передать 32-разрядное целое число со знаком x через сокет. Чтобы получатель знал, какой порядок байтов ожидать, я звоню htonl(x) перед отправкой. htonl ожидает a uint32_t, хотя и я хочу быть уверенным в том, что происходит, когда я накладываю int32_t на uint32_t.
int32_t x = something;
uint32_t u = (uint32_t) x;
Всегда ли так, что байты в x и u будут одинаковыми? Как насчет отбрасывания:
uint32_t u = something;
int32_t x = (int32_t) u;
Я понимаю, что отрицательные значения передаются в большие значения без знака, но это не имеет значения, так как я просто возвращаюсь на другой конец. Однако, если литые беспорядки с фактическими байтами, то я не могу быть уверен, что отбрасывание вернет то же значение.