Linux网络编程---IP 地址格式转换函数

Linux网络编程—IP 地址格式转换函数

  我们更容易阅读的IP地址是以点分十进制表示的,例如:192.168.5.10 ,这是一种字符串的形式,但是计算器所需要的IP地址是以二进制进行表示,这便需要我们在点分十进制字符串和二进制地址之间进行转换。
  点分十进制字符串和二进制地址之间的转换函数主要有:inet_aton、inet_addr、inet_ntoa、inet_ntop、inet_pton 这五个,在使用它们时需要包含头文件<sys/socket.h>、<arpa/inet.h>以及<netinet/in.h>。

1 inet_aton、inet_addr、inet_ntoa 函数

  这些函数可将一个 IP 地址在点分十进制表示形式和二进制表示形式之间进行转换,但是我们现在基本不用这些函数。
  我们将介绍下述的两个函数完成我们的点分十进制字符串和二进制地址的转化。

2 inet_ntop 、inet_pton 函数

  inet_ntop()、inet_pton()与 inet_ntoa()、inet_aton()类似,但它们还支持 IPv6 地址。它们将二进制 Ipv4 或Ipv6 地址转换成以点分十进制表示的字符串形式,或将点分十进制表示的字符串形式转换成二进制 Ipv4 或Ipv6 地址。
  使用这两个函数需要包含头文件<arpa/inet.h>。

2.1 inet_pton()函数

inet_pton()函数将点分十进制表示的字符串形式转换成二进制 Ipv4 或 Ipv6 地址,它的函数原型如下所示:

int inet_pton(int af, const char *src, void *dst);
  • 参数 af 必须是 AF_INET 或 AF_INET6,AF_INET 表示待转换的 Ipv4地址,AF_INET6 表示待转换的是 Ipv6 地址;
  • 如果参数 af 被指定为 AF_INET,则参数 dst 所指对象应该是一个 struct in_addr 结构体的对象;如果参数 af 被指定为 AF_INET6,则参数 dst 所指对象应该是一个 struct in6_addr 结构体的对象。
  • 字符串 src 表示需要转化的二进制,参数 dst 用于存放转化后得到的地址。

使用示例:

#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>#define IPV4_ADDR "192.168.5.10"int main(void)
{struct in_addr addr;inet_pton(AF_INET, IPV4_ADDR, &addr);printf("ip addr: 0x%x\n", addr.s_addr);exit(0);
}

在这里插入图片描述

2.2 inet_ntop()函数

inet_ntop()函数执行与 inet_pton()相反的操作,函数原型如下所示:

const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
  • 参数 src 应指向一个 struct in_addr 结构体对象或 struct in6_addr 结构体对象,依据参数 af 而定。
  • 函数inet_ntop()会将参数 src 指向的二进制 IP 地址转换为点分十进制形式的字符串,并将字符串存放在参数 dts 所指的缓冲区中,参数 size 指定了该缓冲区的大小。

示例:

#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
int main(void)
{struct in_addr addr;char buf[20] = {0};addr.s_addr = 0xa05a8c0;inet_ntop(AF_INET, &addr, buf, sizeof(buf));printf("ip addr: %s\n", buf);exit(0);
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/626361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java基础类型与输入输出

本文简述在算法中常用的基本数据类型&#xff0c;以及输入输出方法。 数据类型 1.int&#xff08;整型&#xff09; int数据类型是32位、有符号的整数&#xff0c;以二进制补码表示。 最小值是-2&#xff0c;147&#xff0c;483&#xff0c;648 (-2^31)。 最大值是2&#xf…

java版直播商城平台规划及常见的营销模式 电商源码/小程序/三级分销+商城 免 费 搭 建

鸿鹄云商 B2B2C产品概述 【B2B2C平台】&#xff0c;以传统电商行业为基石&#xff0c;鸿鹄云商支持“商家入驻平台自营”多运营模式&#xff0c;积极打造“全新市场&#xff0c;全新 模式”企业级B2B2C电商平台&#xff0c;致力干助力各行/互联网创业腾飞并获取更多的收益。从消…

【现代密码学】笔记6--伪随机对象的理论构造《introduction to modern cryphtography》

【现代密码学】笔记6--伪随机对象的理论构造《introduction to modern cryphtography》 写在最前面6 伪随机对象的理论构造 写在最前面 主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。 内容补充&#xff1a;骆婷老师的PPT 《introduction to modern cryphtogr…

Qt/C++中英输入法/嵌入式输入法/小数字面板/简繁切换/特殊字符/支持Qt456

一、前言 在嵌入式板子上由于没有系统层面的输入法支持&#xff0c;所以都绕不开一个问题&#xff0c;那就是在需要输入的UI软件中&#xff0c;必须提供一个输入法来进行输入&#xff0c;大概从Qt5.7开始官方提供了输入法的源码&#xff0c;作为插件的形式加入到Qt中&#xff…

网络广播号角喇叭在智能工地施工现场的应用,以及网络广播在公共广播中的实际作用。

网络号角喇叭在智能工地施工现场的应用&#xff0c;以及网络广播在公共广播中的实际作用。 SV-7044村村通ip网络通信广播号角喇叭&#xff0c;网络音箱&#xff0c;网络音柱是一种公共广播技术&#xff0c;主要应用于公共场所&#xff0c;如公交、商场、大型活动场所等。可以用…

visual studio的安装及scanf报错的解决

visual studio是一款很不错的c语言编译器 下载地址&#xff1a;官网 点击后跳转到以下界面 下滑后点击下载Vasual Sutdio&#xff0c;选择社区版即可 选择位置存放下载文件后&#xff0c;即可开始安装 安装时会稍微等一小会儿。然后会弹出这个窗口&#xff0c;我们选择安装位…

linux不同场景下修改文件名的五种方法

开头语&#xff1a; 大家好&#xff0c;欢迎来到本文&#xff01;在Linux系统中&#xff0c;修改文件名是我们在日常工作中经常遇到的任务之一。本文将分享三种常用的Linux修改文件名的方法&#xff0c;旨在帮助大家更灵活高效地管理文件。让我们一起来了解这些方法吧&#xf…

Pandas实战100例 | 案例 55: 应用条件

案例 55: 应用条件 知识点讲解 在数据处理过程中&#xff0c;有时需要根据条件对数据进行转换或计算。Pandas 的 apply 方法允许你对 DataFrame 的每一行或列应用一个自定义函数&#xff0c;实现复杂的逻辑。 应用条件: 使用 apply 方法结合 lambda 函数&#xff0c;可以根据…

go语言中的GoMock

GoMock是一个Go框架。它与内置的测试包整合得很好&#xff0c;并在单元测试时提供了灵活性。正如我们所知&#xff0c;对具有外部资源&#xff08;数据库、网络和文件&#xff09;或依赖关系的代码进行单元测试总是很麻烦。 安装 为了使用GoMock&#xff0c;我们需要安装gomo…

无需编程,简单易上手的家具小程序搭建方法分享

想要开设一家家具店的小程序吗&#xff1f;现在&#xff0c;我将为大家介绍如何使用乔拓云平台搭建一个家具小程序&#xff0c;帮助您方便快捷地开展线上家具销售业务。 第一步&#xff0c;登录乔拓云平台进入商城后台管理页面。 第二步&#xff0c;在乔拓云平台的后台管理页面…

Vulnhub-Raven-1

一、信息收集 端口扫描 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u4 (protocol 2.0) | ssh-hostkey: | 1024 26:81:c1:f3:5e:01:ef:93:49:3d:91:1e:ae:8b:3c:fc (DSA) |_ 256 0e:85:71:a8:a2:c3:08:69:9c:91:c0:3f:84:18:df:…

Day27- 贪心算法part01

一、分发饼干 题目一&#xff1a;455. 分发饼干 455. 分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最…

分布式系统中数据库和缓存双写一致性的实现技术

标题&#xff1a;分布式系统中数据库和缓存双写一致性的实现技术 在分布式系统中&#xff0c;为了确保数据库和缓存之间的数据一致性&#xff0c;双写一致性成为了一个关键的挑战。本文将深入探讨如何利用一些常见的技术手段来保证数据库和缓存的双写一致性&#xff0c;以及通…

多线程——CAS

什么是CAS CAS的全称&#xff1a;Compare and swap&#xff0c;字面意思就是&#xff1a;“比较并交换”&#xff0c;一个CAS涉及到以下操作&#xff1a; 假设内存中的原数据V&#xff0c;旧的预期值A&#xff0c;需要修改的新值B 1.比较A与V是否相等&#xff08;比较&#xf…

antd pro项目部署到gitpage白屏

先总结一下如何部署项目到gitpage 1.新建分支gh-pages 2.把打包好的文件放在这个分支下 3. 之前打开一直白屏&#xff0c;有很多坑 第一个&#xff0c;import { getIntl } from umijs/max;这个引入要&#xff0c;不能是./引入的 第二个&#xff0c;新建一个config.prod.t…

@Autoware和@Resource区别

Autowired和Resource区别 一、相同点 作用都是将bean属性注入到对应的属性中去。 二、区别 1、注入方式 &#xff08;1&#xff09;Autowired的注入顺序是先按照bean的类型&#xff08;byType&#xff09;&#xff0c;再按照bean的名字&#xff08;byName&#xff09;。 &…

盘点2023年信息系统故障

安全生产&#xff0c;人人有责。每年信息系统安全事件层出不穷&#xff0c;作为一线运维人员对这些生产安全故障当抱有敬畏之心&#xff0c;并从中总结经验教训&#xff0c;分析原因&#xff0c;不能简单的调侃为开猿节流、降本增笑的结果。本文简要盘点2023年发生的主要信息系…

Java NIO (一)简介(备份)

1 NIO简介 在1.4版本之前&#xff0c;Java NIO类库是阻塞IO&#xff0c;从1.4版本开始&#xff0c;引进了新的异步IO库&#xff0c;被称为Java New IO类库&#xff0c;简称为Java NIO。New IO类库的目的 就是要让Java支持非阻塞IO。 Java NIO类库包含三个核心组件&#xff1a; …

Shell基本操作(2)

文件显示与编辑 连接并显示文件内容 cat cat[options] file... options -n加上行号 -s将连续两行以上的空白行替换为一行如果file不止一个文件&#xff0c;则会将它们连接起来如果想一次只看一页&#xff0c;可以使用more或者less命令 过滤文件内容grep grep命令可以查找拥…

Vue和小程序的区别

一.生命周期不一样&#xff1a; 1.1小程序生命周期&#xff1a;onLoad页面加载、onShow页面显示、onReady页面初次渲染完成、onHide页面隐藏、onUnload页面卸载 1..2 vue生命周期&#xff1a;data、mouted、beforeupdate、updated、beforedestory、destroyed二.数据请求时间不一…