C 从用户获取IP输入并验证WINAPI
如何获取用户在Winapi的IP控制框中插入的IP,并在之后进行验证 已经尝试过GetDlgItem(),但它似乎没有以正确的格式存储IP,可能是我做错了。我将它存储为DWORDC 从用户获取IP输入并验证WINAPI,c,winapi,ip,C,Winapi,Ip,如何获取用户在Winapi的IP控制框中插入的IP,并在之后进行验证 已经尝试过GetDlgItem(),但它似乎没有以正确的格式存储IP,可能是我做错了。我将它存储为DWORD 有什么提示吗?您可以通过发送一条消息从中检索IP地址1): 返回时,DWORD包含IP地址,其中MSB存储第一个八位字节,而LSB存储第四个八位字节。您可以将地址输出为人类可读的格式,如下所示: printf("%u.%u.%u.%u\n", (dwAddr >> 24) & 0xff,
有什么提示吗?您可以通过发送一条消息从中检索IP地址1): 返回时,
DWORD
包含IP地址,其中MSB存储第一个八位字节,而LSB存储第四个八位字节。您可以将地址输出为人类可读的格式,如下所示:
printf("%u.%u.%u.%u\n", (dwAddr >> 24) & 0xff,
(dwAddr >> 16) & 0xff,
(dwAddr >> 8) & 0xff,
(dwAddr ) & 0xff);
或者,使用、和宏提取地址信息:
printf("%u.%u.%u.%u\n", FIRST_IPADDRESS(dwAddr), SECOND_IPADDRESS(dwAddr),
THIRD_IPADDRESS(dwAddr), FOURTH_IPADDRESS(dwAddr));
1) 由于地址以压缩形式返回为
DWORD
,因此无需验证它,因为任何DWORD
(如果解释为IPv4地址的4部分)都是有效地址。正如IInspectable所指出的,一种方法是发送消息,而第二种也是最简单的方法是调用。这将删除不必要的printf
WCHAR wAddress[64] = {0};
GetWindowTextW(hWndIpAddr, wAddress, 32);
我使用
printf
来说明如何从DWORD
中提取单个信息。不需要。现在,如果您检索文本表示,您将必须解析出标记以将其存储到一个文本中,例如。这确实是常见的用例。有一些宏用于从DWORD
中提取单个组件:第一个\u IPADDRESS()
,第二个\u IPADDRESS()
,等等。
WCHAR wAddress[64] = {0};
GetWindowTextW(hWndIpAddr, wAddress, 32);