由于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. Linux命令为IPV6 IP地址比较
- 4. 比较IPv4地址以IPv6表示法
- 5. IPV6地址的按位比较
- 6. 比较地址
- 7. 将Python地址作为字符串或整数进行比较?
- 8. 使用NSArray进行C型int比较
- 9. 定期对IPv6地址
- 10. 如何使用IPv6地址进行卷曲?
- 11. Java比较地址
- 12. 比较IP地址
- 13. 比较操作
- 14. 如何比较两个ipv6地址在一个小端机在C
- 15. 在C#中使用泛型有条件地进行比较
- 16. C++重写地址操作
- 17. 使用netlink的ipv6本地地址
- 18. 比较数组的地址在C++ 11
- 19. 比较IP地址与C编程
- 20. 解析比较IP地址在C++
- 21. 对象比较:地址VS内容
- 22. 比较对象内存地址,Java
- 23. printf ipv6地址使用struct in6_addr和ipv4地址使用u_int32_t
- 24. 使用nmap对特定IP地址进行操作系统检测
- 25. 比较IP地址在PHP不工作
- 26. 使用Equatable in Swift将对象作为属性进行比较
- 27. 改进Python比较和存在操作
- 28. 获取ipv6地址的十进制值
- 29. 如何在Windows中使用C++比较两个端点地址:
- 30. 代表IPv6地址
或者已经有'operator =='的'boost :: array'。 –
dalle
2009-12-30 11:35:51