gpt4 book ai didi

c++ - WSAStringToAddress 认为 "1.2.3"是一个有效的 IP 地址

转载 作者:行者123 更新时间:2023-11-30 01:49:18 26 4
gpt4 key购买 nike

我需要检查一个字符串是否是 Windows C++ 应用程序中的有效 IPv4 地址。我使用的代码是:

char *ipAddress = ... // get from user input
struct sockaddr_in sa;
int sizeof_sa = sizeof(sa);
int valid = WSAStringToAddressA(ipAddress, AF_INET,NULL, (LPSOCKADDR)&sa,&sizeof_sa);

如果我输入“1.2.3”作为ipAddress的值,WSAStringToAddressA返回0,表明它是一个有效的IPv4地址,当它显然只有三个八位字节。

为什么 WSAStringToAddressA 认为“1.2.3”是一个有效的 IPv4 地址?

最佳答案

因为就 Microsoft 的解析器而言,它一个有效的 IPv4 地址。 inet_addr()文档对此进行了更详细的解释:

Internet Addresses

Values specified using the ".'' notation take one of the following forms:

a.b.c.d a.b.c a.b a

When four parts are specified, each is interpreted as a byte of data and assigned, from left to right, to the 4 bytes of an Internet address. When an Internet address is viewed as a 32-bit integer quantity on the Intel architecture, the bytes referred to above appear as "d.c.b.a''. That is, the bytes on an Intel processor are ordered from right to left.

The parts that make up an address in "." notation can be decimal, octal or hexadecimal as specified in the C language. Numbers that start with "0x" or "0X" imply hexadecimal. Numbers that start with "0" imply octal. All other numbers are interpreted as decimal.

Internet address value   Meaning"4.3.2.16"               Decimal "004.003.002.020"        Octal "0x4.0x3.0x2.0x10"       Hexadecimal "4.003.002.0x10"         Mix 

The inet_addr function supports the decimal, octal, hexadecimal, and mixed notations for the string passed in the cp parameter.

Note The following notations are only used by Berkeley software, and nowhere else on the Internet. For compatibility with Berkeley software, the inet_addr function also supports the additional notations specified below.

When a three-part address is specified, the last part is interpreted as a 16-bit quantity and placed in the right-most 2 bytes of the network address. This makes the three-part address format convenient for specifying Class B network addresses as "128.net.host"

When a two-part address is specified, the last part is interpreted as a 24-bit quantity and placed in the right-most 3 bytes of the network address. This makes the two-part address format convenient for specifying Class A network addresses as "net.host''.

When only one part is given, the value is stored directly in the network address without any byte rearrangement.

关于c++ - WSAStringToAddress 认为 "1.2.3"是一个有效的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29285954/

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