概述
这一部分主要是网络编程中会使用,将数串和IP地址进行转换,在进行转换之前,我们需要知道IP地址在linux系统中的结构体定义
地址类型结构体
具体如下表:
结构体 | 功能 | 特性 |
---|---|---|
struct sockaddr | 套接字地址结构 | IPv4/IPv6通用 |
struct sockaddr_in | IPv4套接字地址结构 | IPv4专用 |
struct in_addr | IPv4地址结构 | IPv4专用 |
in_addr_t | IPv4地址类型 | IPv4专用 |
truct sockaddr_in6 | IPv6套接字地址结构 | IPv6专用 |
这些地址中具体包含的变量有:
- 套接字地址结构
struct sockaddr {
unsigned short sa_family; // 套接字地址簇类型,为AF_INET
char sa_data[14]; // 套接字地址数据(14位的协议地址)
};
- IPv4套接字地址结构
struct sockaddr_in{
short sin_family; // 套接字地址簇类型,为AF_INET
unsigned short sin_port; // 端口号,网络字节序
struct in_addr sin_addr; // IP地址,网络字节序
unsigned char sin_zero[8];// 填充字节
};
- IPv4地址结构
struct in_addr {
in_addr_t s_addr;
};
- IPv4地址类型
typedef unsigned int in_addr_t;
- IPv6套接字地址结构
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地址类型,具体代码如下:
#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地址进行转换?地址类型结构体转换函数代码举例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复