我是靠谱客的博主 兴奋跳跳糖,这篇文章主要介绍如何将字符数串和IP地址进行转换?地址类型结构体转换函数代码举例,现在分享给大家,希望可以做个参考。

这一部分主要是网络编程中会使用,将数串和IP地址进行转换,在进行转换之前,我们需要知道IP地址在linux系统中的结构体定义

地址类型结构体

具体如下表:

结构体功能特性
struct sockaddr套接字地址结构IPv4/IPv6通用
struct sockaddr_inIPv4套接字地址结构IPv4专用
struct in_addrIPv4地址结构IPv4专用
in_addr_tIPv4地址类型IPv4专用
truct sockaddr_in6IPv6套接字地址结构IPv6专用

这些地址中具体包含的变量有:

  • 套接字地址结构
复制代码
1
2
3
4
5
struct sockaddr { unsigned short sa_family; // 套接字地址簇类型,为AF_INET char sa_data[14]; // 套接字地址数据(14位的协议地址) };
  • IPv4套接字地址结构
复制代码
1
2
3
4
5
6
7
struct sockaddr_in{ short sin_family; // 套接字地址簇类型,为AF_INET unsigned short sin_port; // 端口号,网络字节序 struct in_addr sin_addr; // IP地址,网络字节序 unsigned char sin_zero[8];// 填充字节 };
  • IPv4地址结构
复制代码
1
2
3
4
struct in_addr { in_addr_t s_addr; };
  • IPv4地址类型
复制代码
1
2
typedef unsigned int in_addr_t;
  • IPv6套接字地址结构
复制代码
1
2
3
4
5
6
7
8
9
struct sockaddr_in6{ uint8_t sin6_len; //IPv6 为固定的24 字节长度 sa_family_t sin6_family; //套接字地址簇类型,为AF_INET6 in_port_t sin6_port; //16 位端口号,网络字节序 uint32_t sin6_flowinfo; //32 位流标签 struct in6_addr sin6_addr; //128 位IP地址 }

转换函数

函数功能特点
int inet_aton(const char string, struct in_addraddr)点分十进制数串转网络字节序长整型IPv4专用
in_addr_t inet_addr(const char* string)点分十进制数串转网络字节序长整型IPv4专用
char* inet_ntoa(struct in_addr addr)网络字节序长整型转点分十进制数串IPv4专用
int inet_pton(int af, const char *src, void *dst)点分十进制数串转网络字节序长整型IPv4/IPv6通用(推荐)
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt)网络字节序长整型转点分十进制数串IPv4/IPv6通用(推荐)

代码举例

我们首先定一个char型字符串,然后将该字符数串转化为IP地址类型,具体代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream> #include <cstring> #include <arpa/inet.h> using namespace std; int main(){ const char* ip = "127.0.0.1"; struct in_addr addr; int res = inet_aton(ip,&addr); if(res == 0){ perror("inet_Aton error"); } cout << addr.s_addr << endl; cout << inet_ntoa(addr) << endl; cout << inet_ntoa(addr) << endl; }

运行结果如下:

在这里插入图片描述

最后

以上就是兴奋跳跳糖最近收集整理的关于如何将字符数串和IP地址进行转换?地址类型结构体转换函数代码举例的全部内容,更多相关如何将字符数串和IP地址进行转换内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部