Linux下这2个IP地址转换函数,可以在将IP地址在“点分十进制”和“整数”之间转换
而且,inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。算是比较新的函数了。
inet_pton函数原型如下[将“点分十进制” -> “整数”]
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
这个函数转换字符串到网络地址,第一个参数af是地址族,转换后存在dst中
inet_pton 是inet_addr的扩展,支持的多地址族有下列:
af = AF_INET
src为指向字符型的地址,即ASCII的地址的首地址(ddd.ddd.ddd.ddd格式的),函数将该地址
转换为in_addr的结构体,并复制在*dst中
af =AF_INET6
src为指向IPV6的地址,,函数将该地址
转换为in6_addr的结构体,并复制在*dst中
如果函数出错将返回一个负值,并将errno设置为EAFNOSUPPORT,如果参数af指定的地址族和src格式不对,函数将返回0。
inet_ntop函数原型如下[将“点分十进制” -> “整数”]
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
这个函数转换网络二进制结构到ASCII类型的地址,参数的作用和上面相同,只是多了一个参数socklen_t cnt,他是所指向缓存区dst的大小,避免溢出,如果缓存区太小无法存储地址的值,则返回一个空指针,并将errno置为ENOSPC
下面是例程
char IPdotdec[20]; //存放点分十进制IP地址
struct in_addr s; // IPv4地址结构体
int main (void)
{
// 输入IP地址
printf("Please input IP address: ");
scanf("%s", &IPdotdec);
// 转换
inet_pton(AF_INET, IPdotdec, (void *)&s);
printf("inet_pton: 0x%x\n", s.s_addr); // 注意得到的字节序
// 反转换
inet_ntop(AF_INET, (void *)&s, IPdotdec, 16);
printf("inet_ntop: %s\n", IPdotdec);
}
分享到:
相关推荐
inet_pton()和inet_ntop()函数就提供了这样的功能,它们是处理IPv4和IPv6地址转换的现代网络编程函数。 inet_pton() 函数用于将点分十进制格式的IP地址转换为用于网络传输的二进制数值。该函数可以处理IPv4和IPv6...
理解并熟练运用`inet_pton`对于进行网络通信和数据包处理至关重要。 函数`inet_pton`的全称为`Internet Protocol Network Address to Presentation Format`,即互联网协议网络地址到展示格式的转换。这个函数的主要...
本文将详细介绍Linux环境下inet_pton、inet_ntop以及inet_aton这三个函数,它们是用于在点分十进制IP地址和二进制整数IP地址之间进行转换的重要工具。 首先,让我们关注inet_pton和inet_ntop这两个函数。它们在处理...
为了在两者之间进行转换,开发人员通常会使用`inet_pton`和`inet_ntop`这两个函数。这两个函数在Linux下广泛使用,并且也支持IPv4和IPv6地址。 `inet_pton`(Presentation to Network)是将点分十进制的IP地址转换...
本文将深入探讨C语言中用于IP地址转换的几个关键函数:inet_aton、inet_ntoa、inet_addr以及IPv6兼容的inet_pton和inet_ntop。 首先,我们关注的是仅支持IPv4的函数:inet_aton、inet_ntoa和inet_addr。这些函数...
- **inet_pton和inet_ntop函数**:介绍了更安全、通用的版本,用于将点分十进制IP地址字符串转换为二进制形式,或反之亦然。 - **sock_ntop及其相关函数**:描述了如何将Socket地址结构转换为易于阅读的形式。 - ...
另外,还涉及了inet_pton和inet_ntop函数,这两个函数是用于地址转换的,适用于IPv4和IPv6。sock_ntop和相关函数用于展示套接字地址结构的内容。 本书对于网络编程中的数据读取和写入也进行了讨论,提供了readn、...
分别利用函数 inet_addr、inet_pton ,将“字符串”192.168.12.13“转化位4字节整型数。分别利用函数 inet_ntoa 、inet...利用函数inet_pton、inet_ntop,将"2001:3211::1" 转换位IPV6地址,并转换字符串输出
在实际编程中,这些函数结合使用,例如,`readn`和`writen`用于网络套接字间的可靠数据传输,`inet_pton`和`inet_ntop`用于处理IP地址的字符串和二进制形式,而字节序转换函数确保数据在网络上的正确表示。...
随着IPv6的普及,出现了两个新的函数`inet_pton`和`inet_ntop`,它们分别用于将地址字符串转换为网络地址(不管IPv4还是IPv6)和将网络地址转换为字符串。`inet_pton`接受地址族(如AF_INET或AF_INET6)、源字符串和...
- `inet_pton()` 和 `inet_ntop()` 分别用于将IP地址字符串转换为二进制形式,以及从二进制形式转换为字符串。这两个函数支持IPv4和IPv6,并且比`inet_aton()`和`inet_ntoa()`更安全,不会导致内存问题。 4. **...
- `inet_ntop()`:与`inet_pton()`相反,它将网络地址结构体转换为ASCII表示的IP地址。同样,第一个参数是地址家族,第二个参数是源地址,第三个参数是接收转换结果的缓冲区,第四个参数是缓冲区大小。成功返回转换...
socket编程是一种在Linux下的进程间通信机制,用于不同主机上或同一主机上应用程序之间的通信。它通常采用客户端与服务器的模式进行通信,多个客户端可以同时...IP地址格式转换可使用inet_ntop()和inet_pton()函数.....
* `inet_pton()`:将字符串形式的 IPv4 或 IPv6 地址转换为数值。 * `inet_ntop()`:将数值转换为字符串形式的 IPv4 或 IPv6 地址。 TCP 套接口函数 TCP 套接口函数用于创建套接字,以下是常用的 TCP 套接口函数:...
- `inet_pton` 和 `inet_ntop` 提供了更安全的IP地址转换方式,支持IPv4和IPv6,返回值指示成功或失败,并且可以处理错误情况。它们需要指定地址族(如AF_INET或AF_INET6)和目标缓冲区大小。 4. **readn、writen ...
然后,它使用`inet_pton()`函数将IP地址字符串转换为二进制格式的`struct in_addr`结构体。接下来,调用`gethostbyaddr()`函数,传入IP地址的二进制表示、其长度和地址家族(这里是AF_INET,表示IPv4)。如果成功,`...
- `int inet_pton(int family, const char* strptr, void* addrptr);` - **inet_ntop()**: 将结构化的IP地址转换为字符串表示。 - `const char* inet_ntop(int family, const void* addrptr, char* strptr, size_...
4. **IPv4/IPv6通用地址转换函数**:`inet_pton()`和`inet_ntop()`函数是更现代的地址转换方式,它们支持IPv4和IPv6。`inet_pton()`将地址字符串转换为二进制格式,`inet_ntop()`则执行相反的操作。 5. **TCP套接口...