2014-10-20 2 views
1

Поэтому у меня есть переменные:Как поместить один байт в сетевой порядок байтов?

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-битных значений?

ответ

2

Что следует использовать для 8-битных значений?

Ничего. Для 1-байтных (8-битных) значений нет «сущности». Поэтому вам не нужно беспокоиться о них (поэтому для них нет функции hton).

+0

Как насчет бит-знака в байте, это будет MSB0 или LSB0. обратите внимание на то, что бигенные системы имеют оба представления –

+0

@bare_metal: вы не можете адресовать один бит в своем коде. [Бит-сущность] (http://en.wikipedia.org/wiki/Endianness#.22Bit_endianness.22) обычно применяется только к физической передаче по последовательной среде, и в этих случаях непосредственно обрабатывается самим протоколом и оборудованием (т. Е. 802.3 и 802.11). Что касается кода C, то нет конца бит, поскольку вы не можете адресовать один бит. Endianness - вопрос о том, как байты упаковываются и адресуются; если вы не можете его решить, у него нет никакой сущности. Так как вы не можете адресовать биты, фактически нет бинарного уровня. – Cornstalks

+0

позволяет предположить, что мы перетаскиваем байт с большой конечной машины на другую машину большого конца и считаем, что у одного есть бит-бит MSB0, а у другого есть представление бит LSB0, как это обрабатывается? (Http://en.wikipedia.org/wiki/Bit_numbering). и рекомендуемый стиль RFC - MSB0 –

1

8-битовые значения имеют только один байт, поэтому не имеет никакого значения, в каком порядке их байтов - они будут одинаковыми. Так что ничего не используйте :).

+0

ahh ok Я вижу, имеет смысл сейчас. Спасибо за ответы всем! – umdcoder

0

Что следует использовать для 8-битных значений.

Ничего. Вы не можете поместить один байт в очередь.