2014-10-20 70 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。注意bigendian系统同时具有代表 – 2014-10-21 03:01:30

+0

@bare_metal:你不能在你的代码中寻址一个位。 [Bit endianness](http://en.wikipedia.org/wiki/Endianness#.22Bit_endianness.22)一般只适用于通过串行介质的物理传输,在这些情况下直接由协议和硬件本身处理(即802.3和802.11)。就C代码而言,由于无法寻址单个位,所以不存在位顺序。字节顺序是字节如何打包和处理的问题;如果你不能解决它,它没有endianness。由于你不能处理位,所以没有有效的位级别。 – Cornstalks 2014-10-21 03:28:35

+0

假设我们将一个字节从一个大型机器传输到另一个大型机器,并考虑一个MSB0位表示,另一个LSB​​0位表示如何处理? (http://en.wikipedia.org/wiki/Bit_numbering)。并且RFC建议的样式是MSB0 – 2014-10-21 03:33:07

1

8位值只有一个字节,所以它确实无关紧要,它们是哪个字节顺序 - 它们将是相同的。所以不要使用:)。

+0

ahh ok我明白了,现在有道理。谢谢你的回复! – umdcoder 2014-10-20 21:57:33

0

我应该用什么来的8位值。

什么都没有。你不能把一个字节排序。