比较 ipv4 地址 - sockaddr_in
Compare ipv4 address - sockaddr_in
我想知道某个地址是否在 10.0.0.0 - 10.255.255.255 范围内。
int localAddress = 0;
struct sockaddr_in localOneFirst;
struct sockaddr_in localOneLast;
inet_pton(AF_INET, "11.0.0.0", &(address.sin_addr));
inet_pton(AF_INET, "10.0.0.0", &(localOneFirst.sin_addr));
inet_pton(AF_INET, "10.255.255.255", &(localOneLast.sin_addr));
if((address.sin_addr.s_addr >= localOneFirst.sin_addr.s_addr) && (address.sin_addr.s_addr <= localOneLast.sin_addr.s_addr)) {
localAddress = 1;
}
我的地址 11.0.0.0 大于 10.255.255.255 但这个程序显示不是。
因为 "address.sin_addr.s_addr" 的值为 11 而 "localOneFirst.sin_addr.s_addr" 的值更大。
那么我如何识别某个地址是否在此范围内?
sockaddr_in
地址以网络字节顺序(大端)存储。如果您的代码在大端系统上 运行,则值将无法正确比较。
比较值时使用ntohl()
:
bool localAddress = (
(ntohl(address.sin_addr.s_addr) >= ntohl(localOneFirst.sin_addr.s_addr)) &&
(ntohl(address.sin_addr.s_addr) <= ntohl(localOneLast.sin_addr.s_addr))
);
我想知道某个地址是否在 10.0.0.0 - 10.255.255.255 范围内。
int localAddress = 0;
struct sockaddr_in localOneFirst;
struct sockaddr_in localOneLast;
inet_pton(AF_INET, "11.0.0.0", &(address.sin_addr));
inet_pton(AF_INET, "10.0.0.0", &(localOneFirst.sin_addr));
inet_pton(AF_INET, "10.255.255.255", &(localOneLast.sin_addr));
if((address.sin_addr.s_addr >= localOneFirst.sin_addr.s_addr) && (address.sin_addr.s_addr <= localOneLast.sin_addr.s_addr)) {
localAddress = 1;
}
我的地址 11.0.0.0 大于 10.255.255.255 但这个程序显示不是。
因为 "address.sin_addr.s_addr" 的值为 11 而 "localOneFirst.sin_addr.s_addr" 的值更大。
那么我如何识别某个地址是否在此范围内?
sockaddr_in
地址以网络字节顺序(大端)存储。如果您的代码在大端系统上 运行,则值将无法正确比较。
比较值时使用ntohl()
:
bool localAddress = (
(ntohl(address.sin_addr.s_addr) >= ntohl(localOneFirst.sin_addr.s_addr)) &&
(ntohl(address.sin_addr.s_addr) <= ntohl(localOneLast.sin_addr.s_addr))
);