比较 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))
);
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Softmax Implementation in C++
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- IF-nesting in c++
- Gurobi GRBModel and GRBmodel in C++
- Tensorflow Hub in C++
- Centos7 g++ "to_string is not in a member of std"
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- 将 lambda 表达式传递给 std::function in C++
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- std::async from std::async in windows xp