2015-06-18 51 views
1

我想比較兩個ipv6地址但是想要創建代碼是便攜式。我知道ipv6地址是以網絡字節順序(big endian)存儲的,所以在big endian CPU上,我可以簡單地在兩個in6_addr結構中使用memcmp。但是,在小端機器上做同樣事情的最簡單方法是什麼?如何比較兩個ipv6地址在一個小端機在C

[編輯]當我想比較兩個地址我想弄清楚地址是否小於,等於或大於另一個。我認爲memcmp會依賴於它在內存中的位掃描順序。

+1

如果兩個地址都是網絡字節順序,你可以用'memcmp()'它們。 – Havenard

+1

爲什麼你認爲'memcmp()'不能在小端機器上工作? –

+1

'memcmp()'在這種情況下仍應該有所幫助,主要是因爲它的網絡字節順序,它使每個字節的字節比較完美。如果指定的第一個地址在另一個之前,則memcmp()將返回<<0;如果它們相同,則返回'0';如果它們相對於另一個,則返回'> 0。 – Havenard

回答

2

其實,我認爲memcmp可能會工作。我知道有一種128位數據類型的流行機器。我懷疑ipv6地址通常是以字節數組的形式出現的。鑑於網絡字節順序是big-endian,memcmp會首先查看並比較高位字節,如您所願。

你很想知道機器的排序是否對便攜性有影響,但在這種情況下,我認爲它沒有。當我們處理已經從網絡上覆制的16位或32位整數時,字節順序很重要,我們希望將它們作爲整數處理。但是在這裏,只有一個字節數組,這個問題不存在。

我通常不會說這個 - 我通常喜歡首先明白我在做什麼 - 但是,試試看!