Netexpert FAQ 网络分析专家学习建议入口 @netexpert成员申请指南
netexpert积分规则的说明 Netis招贤纳士(2008年11月22日更新)
发新话题
打印

关于inet_addr()的问题

关于inet_addr()的问题

最近才发现的一个问题(大家别笑话我哈~)

WINDOWS的PING程序好象也是使用inet_addr()来获取IP地址的输入的

于是我很想看看inet_addr()的实现,为什么它既可以接受如:202.1.2.3类的

点分十进制参数,又可以接受一个由202.1.2.3转换来的纯十进制ULONG参数呢?

但是现在关于inet_addr()我只知道它返回的是一个ulong而已

烦劳了解inet_addr()的同志们~帮我解释下啦~~

当然,如果有实现的代码也可以~

TOP

inet_addr
The inet_addr function converts a string containing an (Ipv4) Internet Protocol dotted address into a proper address for the IN_ADDR structure.

unsigned long inet_addr(
  const char* cp
);

Parameters
cp
[in] Null-terminated character string representing a number expressed in the Internet standard ".'' (dotted) notation.
Return Values
If no error occurs, inet_addr returns an unsigned long value containing a suitable binary representation of the Internet address given. If the string in the cp parameter does not contain a legitimate Internet address, for example if a portion of an "a.b.c.d" address exceeds 255, then inet_addr returns the value INADDR_NONE.
Remarks
The inet_addr function interprets the character string specified by the cp parameter. This string represents a numeric Internet address expressed in the Internet standard ".'' notation. The value returned is a number suitable for use as an Internet address. All Internet addresses are returned in IP's network order (bytes ordered from left to right). If you pass in " " (a space) to the inet_addr function, inet_addr returns zero.

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


Note  The following notations are only used by Berkeley, and nowhere else on the Internet. For compatibility with their software, they are supported as specified.

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.


Requirements
Client: Included in Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, and Windows 95.
Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server.
Header: Declared in Winsock2.h.
Library: Use Ws2_32.lib.


See Also
Windows Sockets API Reference, Windows Sockets Functions, inet_ntoa

Platform SDK Release: February 2003  What did you think of this topic?
  Order a Platform SDK CD


呵呵,贴一段帮助文件,希望能帮你解决问题。
白天图生存,晚上求发展.
----------------------------------------
解决问题,创造价值,凝聚财富。

TOP

非常感谢~:)

虽然在写回复的时候我还没仔细看呢~呵呵~

但是还是先谢谢你了~~

TOP

发新话题
版块跳转