我正在尝试将存储在 struct sockaddr
中的 IP 地址 (v4) 转换为 uint32_t
。
//struct sockaddr in_addr;
struct sockaddr_in* addr = (struct sockaddr_in*)&in_addr;
uint32_t clientIpAddr = static_cast<uint32_t>(addr->sin_addr.s_addr);
uint16_t clientPortNumber = addr->sin_port;
首先,我想知道这是否可行。
其次,是不是把IP地址转成char[4]
,以后再转成uint32_t
比较好?
第三,IP地址0.0.0.1
会被转换成数字1吗?还是因为字节顺序的原因?
最佳答案
它会起作用,是的。
根据 the documentation , struct in_addr
定义如下:
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
所以是的,您可以将它分配给 uint32_t(您甚至不需要强制转换它)。
“按网络字节顺序”位确实也告诉我们,如果你在不是大端的机器上运行它,你最终会得到垃圾。你想通过 ntohl()
来解决这个问题。
关于c++ - 将 sockaddr 中的 IP 地址转换为 uint32_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32845445/