2014-10-20 91 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位值。

什麼都沒有。你不能把一個字節排序。

相關問題