Я хочу передать 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;
Я понимаю, что отрицательные значения передаются в большие значения без знака, но это не имеет значения, так как я просто возвращаюсь на другой конец. Однако, если литые беспорядки с фактическими байтами, то я не могу быть уверен, что отбрасывание вернет то же значение.