c – 将sockaddr中的IP地址转换为uint32_t

我想把存储在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 - 代码日志