gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:54:18 25 4
gpt4 key购买 nike

我正在尝试将存储在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com