C 如何将单个字节放入网络字节顺序?

C 如何将单个字节放入网络字节顺序?,c,network-programming,byte,network-protocols,bits,C,Network Programming,Byte,Network Protocols,Bits,所以我有变量: 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; 我想按网络字节顺序生成所有值 我知道对16位值使用htons

所以我有变量:

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;
我想按网络字节顺序生成所有值

我知道对16位值使用
htons()
,对32位值使用
htonl()

所以我会这样做:
uint32\u t source\u address=htonl(0)
uint16\u t校验和=htons(0)


8位值应该使用什么?

8位值只有一个字节,因此它们的字节顺序并不重要,它们将是相同的。所以什么都不用:)

8位值应该使用什么

没什么。1字节(8位)值没有“endianness”。因此,您不必担心它们(这就是为什么它们没有
hton
功能的原因)

8位值应该使用什么


没什么。你不能把一个字节按顺序排列。

啊,好的,我明白了,现在有意义了。谢谢大家的回复!一个字节的位结束度如何,是MSB0还是LSB0。请注意,bigendian系统同时具有representations@bare_metal:您无法在代码中寻址一个位。通常仅适用于串行介质上的物理传输,在这些情况下,由协议和硬件本身(即802.3和802.11)直接处理。就C代码而言,没有位的结尾,因为您无法寻址一个位。Endianness是字节如何打包和寻址的问题;如果你不能解决它,它就没有尽头。因为您不能处理位,所以实际上没有位级的子程序。假设我们把一个字节从一个大的EnDead机器转移到另一个大的Endiad机器上,并且考虑一个有MSB0位表示,另一个有一个LSB0位表示,这是如何处理的?(). RFC推荐的样式是MSB0@bare_metal:它在协议中处理。例如,请看。它是以八位字节为单位定义的。因此,当两台计算机传输数据时,它们的网卡必须按照协议要求的顺序排列位。网络硬件为您处理这个位级别的端点,这样您的代码和CPU就不必担心它了。