in_addr,char* ,unsigned long 之间的互相转换

来源:互联网 发布:绘画板 知乎 编辑:程序博客网 时间:2024/05/12 11:32

http://blog.csdn.net/bulerain/article/details/6842636


在网络编程中经常会用到in_addr,char* ,unsigned long表示的IP地址(指定的是IP4),winsock 提供inet_addr(char* -> unsigned  long),inet_ntoa(in_addr -> char*),在实际应用中,不同数据类型总是需要转换,如果每一次转换需要调用函数转换,这样会很繁琐。

      通常,一个IP(v4)地址是一个32位无符号的整数类型,即unsigned long,而in_addr结构可以用来表现每个8位的数值(u_char),in_addr结构实际上也是一个32位无符号的整数类型,也就是in_addr::S_un::S_addr,这样in_addr可以和unsigned long直接转换。为了便于阅读,并提供了char*的形式来表示ip地址。inet_addr用于从 char* 类型到  unsigned  long的转换;inet_ntoa提供了从in_addr -> char*的转换。

     虽然 in_addr,char* ,unsigned long之间可以通过函数来转换,但编写代码的过程很繁琐,几乎每一次转换调用都需要调用函数,而且很容易忘记函数。既然这几个类型可以互相转换,那就可以通过一个类来封装这些类型,使得这些类型可以在类的封装下实现互相转换。

   下面使用一个命名为CIPv4AddressForm的类封装上述的三种数据类型,并在类实现几个常用的方法,比如得到数据成员的数值、在不同类型之间直接转换(实现运算符重载),不同数据类型之间直接赋值。



原创粉丝点击