由於IPV6地址有16個字節,它們沒有數據類型可以將它存儲在C++中,所以我想存儲IPV6地址,並且對IPv6地址進行一些比較,請讓我知道如何去做使用C++對ipv6地址進行比較操作
回答
您可以像在C中一樣將它們存儲爲unsigned char
的普通數組。例如,與unsigned char ipv6[16];
一樣。然後你可以使用任何數組比較算法來比較它們。使用char*
算法不會是一種選擇,因爲你的IPv6地址的一些字節可0x00
,因此解釋爲終止基於字符串的字符的算法的字符串。
並將其作爲標準::字符串。然後,您可以使用字符串比較運算符,因爲這些運算符不會被包含的空字符阻塞,至少在測試相等/不等時是如此。對於關係測試(<,>等),你可能會想寫自己的函數,因爲std :: string可能不會做你想要的。
另一種選擇是定義自己的結構,其可以覆蓋像運算符==!= [等]和內它可以像的16個字符陣列或x整數陣列來實現,可以根據建築結構,因爲你可以定義不知道int的大小。還可以定義用於獲取掩碼等的操作。這種方法允許位操作符的簡單使用。
編輯:
是否使用
std::list<MyIPStruct> iplist
好嗎?
當您通過列表迭代你可以比較
iplist[i] < iplist[i+1]
,如果我理解你的問題,你不知道如何重寫>操作?
struct MyIPStruct {
usigned char[16] bytes; // one option
// unsigned int[16/sizeof(int)] bytes; // another option
/* other methods... */
bool operator > (const MyIPStruct & ip2) { /* here is your code */}
};
創建包裝類字節數組的存儲IPv6地址和過載[]操作符來訪問單個字節,你可以重載操作爲比較。
struct IPV6Address
{
unsigned char address[16];
unsigned char operator [] (int i) ; //
bool operator == (const IPV6Address &ipv6) { //write you own logic }
bool operator < (const IPV6Address &ipv6) { //write you own logic }
};
爲comparisions定義自己的結構比較好,還有一兩件事我很存儲在標準列表中的IP是我需要定義重載操作< == functions.so如何定義<功能任何線索,請
最近不得不面對具有相當忙碼similiar問題。很不理想我使用的基本解決方案是創建一個聯盟與幾個不同的數據類型:
typedef union myip
{
unsigned char ip8[16];
unsigned int ip32[4];
unsigned long long ip64[2];
};
它是一個有點古怪,但結果不錯。要比較兩個IP,只需要在64位整數類型ip.ip64 [0] == ip上進行兩次比較。ip64 [0] & & ip.ip64 [1] = ip.ip64 [1]然後只需添加一些基本功能/宏來覆蓋所需的比較。
要直接從外部結構中複製IPv6,可以在ip8成員上使用memcpy或將結構強制轉換爲指針。 ip32有時可用於IPv4互操作(IPv4映射的IPv6地址)..等等。
如果除了等號之外的任何操作,請記住首先轉換爲主機字節順序,因爲IPv6數組總是以網絡字節順序存儲。
將您的IPV6陣列存儲在std::vector
中。 STL載體已經包含運營商<
和==
。
boost :: array可能更高效(請參閱其他評論) – unixman83 2010-12-15 23:04:31
- 1. 將對等方的IPv6地址與本地主機進行比較
- 2. 將IPv4或IPv6地址轉換爲長字來進行比較
- 3. 定期對IPv6地址
- 4. Java比較地址
- 5. 比較IP地址
- 6. 比較操作
- 7. 在C#中使用泛型有條件地進行比較
- 8. 使用netlink的ipv6本地地址
- 9. 比較IP地址與C編程
- 10. 比較數組的地址在C++ 11
- 11. 比較對象內存地址,Java
- 12. 比較IP地址(作爲varbinary存儲)
- 13. 使用Equatable in Swift將對象作爲屬性進行比較
- 14. 改進Python比較和存在操作
- 15. 獲取ipv6地址的十進制值
- 16. 如何在Windows中使用C++比較兩個端點地址:
- 17. 在行或列操作中進行比較R
- 18. 比較使用動態操作
- 19. 通過使用比較操作
- 20. 解析IPv6地址
- 21. IPv6地址範圍
- 22. 在php比較ip地址
- 23. 如何比較IP地址
- 24. 比較兩個地址列
- 25. MongoDB比較I.P.地址
- 26. SQL/PHP:比較地址
- 27. 比較C++中對象實例的內存地址
- 28. C# - 使用XmlDocument進行Xml操作
- 29. 使用ioctl分配ipv6地址
- 30. 如何使用python擴展ipv6地址?
或者已經有'operator =='的'boost :: array'。 –
dalle
2009-12-30 11:35:51