Поэтому у меня есть переменные:Как поместить один байт в сетевой порядок байтов?
uint8_t version = 1;
uint8_t ttl = 1;
uint16_t payload_length =
uint32_t account_identifier = 24027;
uint32_t source_address = 0;
uint32_t destination_address = 0;
uint16_t checksum = 0;
uint16_t protocol = 1;
Я хочу, чтобы все значения в сетевом порядке байтов.
Я знаю, для использования htons()
для 16-разрядных значений и htonl()
для 32-битных значений.
Так что я хотел бы сделать: uint32_t source_address = htonl(0);
и uint16_t checksum = htons(0);
Что я должен использовать для 8-битных значений?
Как насчет бит-знака в байте, это будет MSB0 или LSB0. обратите внимание на то, что бигенные системы имеют оба представления –
@bare_metal: вы не можете адресовать один бит в своем коде. [Бит-сущность] (http://en.wikipedia.org/wiki/Endianness#.22Bit_endianness.22) обычно применяется только к физической передаче по последовательной среде, и в этих случаях непосредственно обрабатывается самим протоколом и оборудованием (т. Е. 802.3 и 802.11). Что касается кода C, то нет конца бит, поскольку вы не можете адресовать один бит. Endianness - вопрос о том, как байты упаковываются и адресуются; если вы не можете его решить, у него нет никакой сущности. Так как вы не можете адресовать биты, фактически нет бинарного уровня. – Cornstalks
позволяет предположить, что мы перетаскиваем байт с большой конечной машины на другую машину большого конца и считаем, что у одного есть бит-бит MSB0, а у другого есть представление бит LSB0, как это обрабатывается? (Http://en.wikipedia.org/wiki/Bit_numbering). и рекомендуемый стиль RFC - MSB0 –