速查-嵌入式物联网开发中常用的网络转换函数

news2024/11/26 8:19:07

速查-嵌入式物联网开发中常用的网络转换函数

常用的字节序转换函数-网络字节序与主机字节序的转换

如在 一文读懂大端、小端、字节序、MSB、LSB、MSBs、LSBs 中讲述的那样,主机字节序有大小端的区分,有些设备是大端(Big Endian)、有些设备是小端(Little Endian)。不同字节序的设备在网络传输中,可能因字节序问题而导致通信双方的通信错误。因此网络协议这里规定,网络传输中必须使用统一的网络字节序(大端)。

在使用网络字节序时,不同的设备都实现了自己的字节序转换函数。他们通常被用来转换 IP 地址,端口号。

函数\宏定义English含义典型用法
unit32_t htonl (unit32_t hostlong)Host to Network Long将主机字节序转换为网络字节序IP 地址通常为 long 类型的,如转换IP地址:htonl(ip.addr);
unit16_t htons (unit16_t hostshort)Host to Network Short将主机字节序转换为网络字节序Port 即端口号,通常为 short 类型的,如转换Port 口:htons(ip.port);
unit32_t ntohl (unit32_t netlong)Network to Host Long将网络字节序转换为主机字节序从网络上接收的数据可以转换为本机的字节序的 long 类型的数值如:ntohl(ttl);
unit16_t ntohs (unit16_t netshort)Network to Host Short将网络字节序转换为主机字节序从网络上接收的数据可以转换为本机的字节序的 short 类型的数值如:ntohs(port);

数值型 IP 地址与点分十进制 IP 地址的转换

IP地址的三种表示格式及在开发中主要有三种:

1)字符串型点分十进制表示格式

2)数值型网络字节序格式

3)数值型主机字节序格式

一个 IP 地址转换工具的网址:https://www.silisoftware.com/tools/ipconverter.php
在这里插入图片描述
用IP地址192.168.47.106为例:

字符串型点分十进制 IP地址 192.168.47.106 每一部分转换为8位的 数值型主机字节序格式

11000000. 10101000. 00101111. 01101010 =  0xC0A82F6A   (主机字节序)

然后把上面的四部分二进制数从右往左按部分重新排列,那就变为数值型网络字节序格式

01101010. 00101111. 10101000. 11000000 = 0x6A2FA8C0    (网络字节序)

网络地址转换函数

函数\宏定义English含义典型用法
in_addr_t inet_addr(const char *cp)cp: char ip,通常指的是点分十进制 IP地址
in: int addr 通常值的是整形 IP 地址
用于将点分十进制 IP 地址转换成网络字节序 IP 地址。如果正确执行将返回一个无符号长整数型数。如果传入的字符串不是一个合法的 IP 地址,将返回 INADDR_NONE;inet_addr(“127.0.0.1”)= 16777343
int inet_aton(const char *string, struct in_addr *addr)
inet6_aton(cp, addr)
char to numeric将点分十进制IP地址转换成网络字节序IP地址。如果这个函数成功,函数的返回值非零,如果输入地址不正确则会返回零;struct sockaddr_in6 addr;
inet6_aton(“FE80::1”, &addr.sin6_addr);
char *inet_ntoa (struct in_addr)
inet6_ntoa(addr)
numeric to char网络字节序IP转化点分十进制IP。若无错误发生,inet_ntoa()返回一个字符指针(返回值是一个static类型的char *指针)。否则的话,返回NULL。其中的数据应在下一次调用前复制出来;struct sockaddr_in addr;
addr.sin_addr = 16777343;
inet_ntoa(addr.sin_addr)=”127.0.0.1”
int inet_ntoa_r( struct in_addr in, char * buffer, int bufflen );
inet6_ntoa_r(addr, buf, buflen)
numeric to charinet_ntoa() 的线程安全版本。含义同上,网络字节序IP转化点分十进制IP。转换结果存储在 buffer 中。转换成功就返回 0,否则返回 -1。char str[16];
inet_ntoa_r(addr.sin_addr, str, sizeof(str) -1);

同时适用于 IPV4 与 IPV6,数值型网络字节序与字符型点分十进制的转换

函数\宏定义English含义典型用法
int inet_pton(int domain, const char *restrict str, void *restrict addr)presentation to numeric将文本字符串格式转换成网络字节序二进制地址。若成功,返回1;若格式无效,返回0;若出错,返回-1;int lwip_inet_pton(AF_INET, ip, &my.sin_addr);
int inet_ntop(int domain, const char *restrict str, void *restrict addr)numeric to presentation将网络字节序的二进制地址转换成文本字符串。若成功,返回1;若格式无效,返回0;若出错,返回-1;const char *lwip_inet_ntop(int af, const void *src, char *dst, socklen_t size);

总结

1)本文总结了嵌入式、物联网开发中常用的网络转换函数。
2)包括网络字节序与主机字节序的转换函数,比如 htonl()、htons()、ntohl()、ntohs()。
3) 包括数值型 IP 地址与点分十进制 IP 地址的转换,比如 inet_addr()、inet_aton()、inet_ntoa()、inet_ntoa_r()、inet_pton()、inet_ntop()。

创作不易,感谢点赞与收藏。持续更新~

参考资源:

C语言网络族函数htonl()、htons()、inet_addr()、inet_ntoa()实现_c语言htonl_飞fig的博客-CSDN博客

搞清楚C语言的网络函数族hton ntoh 以及大小端记忆法-CSDN博客

htons(), ntohl(), ntohs(),htons()这4个函数_zhuguorong11的博客-CSDN博客

inet_ntop(3) - Linux manual page (man7.org)

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

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

相关文章

OJ题训练(二)

文章目录 反转链表题目来源题目描述知识点题解题解一(递归实现)图解 题解二(双指针)图解 反转链表 题目来源 牛客网 题目描述 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1)&…

Nginx通过SplitClient进行AB测试以及负载均衡分流

文章目录 前言一、Split Clients是什么?二、使用步骤2.1 根据User-Agent进行分流2.2 根据Cookie进行分流2.3 根据IP地址进行分流2.4 根据时间进行分流2.5 根据随机数进行分流 总结 前言 Nginx是一个被广泛应用的Web服务中间件,今天分享一下如何用它做AB…

js获取html input 单选框值的问题

测试代码&#xff1a; ratio.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"ratio.js"></script> </head> <body><input…

一文回顾 Boundless Hackathon at Stanford 首期 Workshop

由Stanford Blockchain Accelerator、Zebec Protocol、Nautilus Chain、Rootz Lab共同主办的“ Boundless Hackathon Stanford ”主题的黑客松活动&#xff0c;即将开启。该活动旨在帮助更多的优质开发者参与到Web3世界的发展中&#xff0c;推动链上设施的创新与应用。 在5月26…

常见的递归

⭐️前言⭐️ 本篇文章分享一些常见的递归题目&#xff0c;为后边的动态规划篇章做铺垫。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言…

设计模式(三):创建型之原型模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(三)&#xff1a;创建型之原型模式 目录 一、设计模式分类二、原型模式1、概述2、结构2、实现3、扩展&#xff08;深克隆&#xff09; 一、设计…

SSM编程---Day 07

目录 SpringMVC 一、概念 二、springMVC的请求处理流程 三、mvc:annotation-driven 标签的作用 四、HandlerMapping、Handler和HandlerAdapter的介绍 五、SpringMVC 体系结构 六、SpringMVC的常用注解 七、view和controller之间的传值 SpringMVC 一、概念 1、 Spring…

ThreadLocal和局部变量的区别

ThreadLocal为线程提供一个线程级别的储物柜&#xff0c;可以往里面存数据&#xff0c;取数据。数据是专属于线程的。 而局部变量&#xff0c;也是专属于线程的。这样来看&#xff0c;两者似乎功能上是一样的&#xff0c;也确实是一样的。 不过局部变量只能通过显示传参的方式…

C++MFC 面向对象程序设计 小型通讯录管理程序设计

课程名称&#xff1a;面向对象程序设计 实验名称&#xff1a;小型通讯录管理程序设计 1.实验目的 深入理解面向对象技术的封装性、继承性和多态性&#xff0c;掌握面向对象程序设计方法。综合应用C基础知识实现小型应用程序开发。掌握使用C流类库实现数据文件访问的操作方…

LabVIEWCompactRIO 开发指南第七章47 EtherCAT RIO

LabVIEWCompactRIO 开发指南第七章47 EtherCAT RIO 在某些应用中&#xff0c;主I/O和扩展I/O系统需要紧密同步--所有输入和输出必须同时更新。使用确定性总线&#xff0c;主控制器不仅可以知道扩展I/O何时更新&#xff0c;还可以确切地知道数据到达需要多长时间。可以使用NI …

电动葫芦无法运转怎么办?

有关电动葫芦无法起动与运转故障&#xff0c;电动葫芦无法起动怎么办&#xff0c;有没有好的解决办法&#xff0c;检查电源熔丝是否烧断&#xff0c;定子绕组相间短路、接地或断路&#xff0c;以及是否负载过大或传动机械故障等。 电动葫芦无法运转故障怎么办 1、首先&#xf…

vue 3 第二十六章:样式(scoped、深度选择器、全局选择器、css modules、自定义注入名称、css中v-bind)

文章目录 1. 介绍2. 基本使用3. scoped原理4. 深度选择器5. 插槽选择器6. 全局选择器7. 混合使用局部与全局样式8. CSS Modules9. 自定义注入名称10. CSS 中的 v-bind() 1. 介绍 在 Vue 中&#xff0c;我们可以使用 scoped 特性来给组件的样式添加作用域。通过为组件的 <st…

win11 revit2022如何卸载干净

目录结构 杀死相关进程卸载相关应用卸载相关目录删除注册表中的相关数据 注意 &#xff1a;下面的结束任务和删除东西有则删除没有则不用管 杀死相关进程 进入任务管理器&#xff08;control shift esc&#xff09;结束相关任务&#xff08;Autodesk开头的文件和名字中带rev…

交通 | 共乘出行:基于图结构的动态多时空供需网络的均衡度量方法

​ 论文解读 郭王懿&#xff0c;孙楚天&#xff0c;陈泰劼&#xff0c;张云天 ​ 编者按 共乘出行极大地改变了人们的日常出行方式。如何高效运营背后的双边平台是极具挑战性的工作。滴滴出行、Lyft公司是其中的佼佼者。本专题将探讨双边平台运营中的一个关键问题&#xff…

高速吹风筒中的发热丝介绍--【其利天下技术】

高速吹风筒用得发热丝&#xff0c;其实是个大功率的家伙&#xff0c;整个产品它的功耗是最大的。它有什么特别的地方呢&#xff1f;与传统的风筒发热丝&#xff0c;高速风筒发热丝有何要求呢&#xff1f; 一&#xff1a;发热丝工作原理&#xff1a; 发热丝是指由导体材料制成的…

LabVIEWCompactRIO 开发指南第七章46 Ethernet RIO

LabVIEWCompactRIO 开发指南第七章46 Ethernet RIO 使用标准以太网协议扩展I/O时&#xff0c;可以使用NI9148以太网RIO扩展机箱。程序员可以利用现有的网络基础设施&#xff0c;如交换机和路由器。尽管全双工交换机网络消除了数据包冲突&#xff0c;但交换机会引入抖动&#…

LeetCode刷题 --- 哈希表

1. 两数之和 解题思路&#xff1a; 利用哈希表&#xff0c;key存数组当前值&#xff0c;value存数组下标两数之和等于target&#xff0c;可以看做是两个数是配对遍历数组&#xff0c;看哈希表中有没有值和这个当前值配对&#xff0c;如果没有&#xff0c;就存入哈希表如果有&am…

Fiddler抓包工具之fiddler设置过滤

fiddler设置过滤 基本的过滤操作流程以百度为例 步骤&#xff1a; 1、右侧高级工具栏点击Filters》勾选Use Filters》选择Show only Internet Hosts和Show only the following Hosts》在文本框中输入host地址 2、点击Changes not yet saved》再点击Actions》Run Filterset …

【医学图像】图像分割系列.4

介绍几篇使用Transformer结构做医学图像分割的论文&#xff1a;CASTformer&#xff08;NeuralPS2022&#xff09;&#xff0c;PHNet&#xff08;arXiv2023&#xff09;。 Class-Aware Adversarial Transformers for Medical Image Segmentation, NeuralPS2022 解读&#xff1a…

37. C++ 基于范围的for循环、指针空值——nullptr(c++11新特性)

目录 1.基于范围的for循环语法如下&#xff1a; 2.一些编程中的实例 3.指针空值——nullptr c11标准下的NULL和nullptr 今天进行了新的学习&#xff0c;基于范围的for循环。基于范围的 for 循环&#xff08;Range-based for loop&#xff09;是 C11 引入的一种循环结构…