如何转换字符串 ipAddress (struct in_addr),反之亦然?以及如何上交无符号长 IP 地址?谢谢
原文由 Safari 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何转换字符串 ipAddress (struct in_addr),反之亦然?以及如何上交无符号长 IP 地址?谢谢
原文由 Safari 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以在 Windows 上使用 netdb.h
winsock2.h
中定义的两个函数,在 Linux 上使用 — 中定义的两个函数
• WSAStringToAddressA
(用于将字符串转换为地址)
• WSAAddressToStringA
(用于将地址转换为字符串)
这两个功能的最佳之处在于它们适用于每个地址系列
这个函数有五个参数
•数组指针或 char
数组的指针包含你的地址
•您的地址的地址族(仅在参数 3 为 NULL
使用)
• WSAPROTOCOL_INFO
结构提供有关您的协议的信息,如果您想使用参数 2,请留空
•指向 sockaddr
结构的指针,结果地址必须存储在其中
• DWORD
类型对象的指针,您的地址的结果长度必须存储在其中
WSAAddressToStringA
这个函数也有五个参数
•指向需要翻译的 sockaddr
结构的指针
•地址的字节长度
•结构 WSAPROTOCOL_INFO
提供有关地址协议的信息。使用 NULL
使函数在参数 1 中使用 sockaddr
结构的地址族
•数组 char
必须以字符串形式存储地址
•您的地址的字符串形式的长度(以字节为单位)
#define _WIN32_INNT 0x601
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <ws2spi.h>
int main()
{
WSADATA wsd;
WSAStartup(MAKEWORD(2,2),&wsd);
char *addr="127.0.0.1";
sockaddr h;
int i;
WSAStringToAddressA(addr,AF_INET,NULL,&h,(DWORD*)&i);
char addr2[INET_ADDRSTRLEN];
int i2;
WSAAddressToStringA(&h,i,NULL,addr,(DWORD*)&i2);
std::cout<<addr2;
}
127.0.0.1
原文由 Legendgamer 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
2 回答2.9k 阅读✓ 已解决
3 回答3.4k 阅读
如果您需要其他方式,请使用
inet_ntop()
和inet_pton()
。不要使用inet_ntoa(), inet_aton()
和类似的,因为它们已被弃用并且不支持 ipv6。这是一个很好的 指南,有很多例子。