我正在尝试将存储在
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吗?还是因为字节顺序而变成其他东西?
sockaddr
。应该声明为sockaddr_in
(IPv4)、sockaddr_in6
(IPv6)或sockaddr_storage
(IP-不可知),然后在将它们传递给各种套接字函数(connect()
、accept()
等)时,将它们强制转换为sockaddr*
。无论如何,要从in_addr
中提取 IPv4 地址,请确保in_addr.sa_family
是AF_INET
,然后对sockaddr_in
进行类型转换即可(您不需要对s_addr
值进行static_cast
,但如果您要使用 C++ 强制转换,则应对in_addr
转换使用reinterpret_cast
)。 - Remy Lebeau