C语言网络族函数htonl()、htons()、inet_addr()、inet_ntoa()实现

2023-05-16

1.htonl()、htons()函数实现

(1) htonl(): 将主机数转换成无符号长整型的网络字节顺序
(2) htons(): 将主机数转换成无符号短整型的网络字节顺序

#include <WinSock2.h>
/*
typedef unsigned char   u_char;
typedef unsigned short  u_short;
typedef unsigned int    u_int;
typedef unsigned long   u_long;
*/
//htonl()函数实现
u_long Htonl(u_long lHost)
{
	char* p = (char*)&lHost;
	char c = *p;
	*p = *(p + 3);
	*(p + 3) = c;
	c = *(p + 1);
	*(p + 1) = *(p + 2);
	*(p + 2) = c;
	return lHost;
}
u_short Htons(u_short sHost)
{
	char* p = (char*)&sHost;
	char c = *p;
	*p = *(p + 1);
	*(p + 1) = c;
	return sHost;
}

2.inet_addr()、inet_ntoa()函数实现

//使用strtok()函数
u_long Inet_addr(const char* pStr)
{
	u_long lHost;
	char* pHost = (char*)&lHost;
	char str[20];
	strcpy_s(str, sizeof(str), pStr);
	char* token = strtok(str, ".");
	while (token)
	{
		*pHost++ = atoi(token);
		token = strtok(NULL, ".");
	}
	return lHost;
}
//使用strchr()函数
u_long Inet_addr(const char* p)
{
	u_long lHost;
	char* pHost = (char*)&lHost;
	char* pStr = (char*)p;
	while (pStr)
	{
		*pHost++ = atoi(pStr);
		pStr = strchr(pStr, '.');
		if (pStr)
			++pStr;
	}
	return lHost;
}

//inet_ntoa()函数实现
char* Inet_ntoa(struct in_addr in)
{
	static char s[20];
	sprintf(s, "%d.%d.%d.%d", in.S_un.S_un_b.s_b1, in.S_un.S_un_b.s_b2,
		in.S_un.S_un_b.s_b3, in.S_un.S_un_b.s_b4);
	return s;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言网络族函数htonl()、htons()、inet_addr()、inet_ntoa()实现 的相关文章

随机推荐

  • 如何设计一个锂电池充电电路(TP4056)

    这个是个单节18650锂电池的充电模块 xff0c 这个是个18650的锂电池 xff0c 18指的是它的直径是18mm xff0c 65指的是它的高度为65mm 这个18650电池的标称电压是3 7V xff0c 电池充满时电压为4 2V
  • 黑马程序员C++系统班学习笔记(一)——Linux操作系统一

    黑马程序员C 43 43 系统班链接 xff1a https www bilibili com video av37403127 from 61 search amp seid 61 5509409937472093685 本笔记旨在记录学
  • ubunbtu下基于c++实现MQTT客户端通信

    文章目录 一 MQTT简介1 1 MQTT 服务器 xff08 Broker xff09 是发布 订阅架构的核心1 2 MQTT 网络协议1 3 服务质量1 4 MQTT 数据包结构1 4 1 MQTT固定头1 4 2 MQTT可变头 Va
  • python 提取页面验证码

    以下代码都使用python 43 selenium 实现 xff0c 请先搭建好开发环境 1 页面的验证码若为静态验证码可以使用截屏的方式获取代码如下 driver save screenshot 39 C crawlerScript pi
  • 基于单片机的GPS开发 (four) GPS基础知识

    一 GPS硬件模块 xff1a VCC xff1a 兼容3 3V和5V GND xff1a 地 TXD xff1a 接51单片机的RXD P3 0 RXD xff1a 可接单片机的TXD P3 1 或者直接悬空 PPS xff1a 时钟脉冲
  • 记录:C++打印堆栈信息并优化打印结果

    1 介绍打印堆栈信息函数 头文件 xff1a span class token macro property span class token directive hash span span class token directive k
  • Ubuntu “无法定位软件包”

    Ubuntu 无法定位软件包 问题描述 xff1a 在使用Ubuntu 18 0 4 安装ceres库时安装依赖项时报错 xff0c 如图所示 xff1a 原因分析 xff1a libcxsparse3 1 2软件包是Ubuntu 14 0
  • NVIDIA Jetson TX2:TX2平台介绍

    一 xff1a TX2平台概述 TX2是快速高效的嵌入式AI计算设备 低功耗 xff08 标准 xff09 模式 xff08 7 5w xff09 xff1b 高功耗模式 xff08 15w xff09 xff0c 性能是TX1的两倍 具有
  • VSCode安装配置C++开发环境

    真相需要去探寻 之前已经在VSCode上配置了Golang的开发环境 xff0c 使用起来还是十分舒服的 xff0c 特别是设置了镜像下载地址和掌握了go mod的使用 xff0c 小巧轻便 xff0c 舒爽流畅 最近要用到C 43 43
  • 图像处理的基本操作(灰度化,二值化)

    基本的概念 xff1a 图像的深度 xff1a 图像中像素点占得bit位数 xff0c 就是图像的深度 xff0c 并不是每个像素点分配了多少位内存空间 xff0c 就一定能够要用完 xff0c 深度仅仅标识用于真真能表示颜色的位数 xff
  • Ubuntu如何切换Python版本

    这几天一直在搞小米官方提供的ESP32 WiFi SDK xff0c 过程中遇到了很多坑 xff0c 其中包括Python版本兼容的问题 xff0c 我的Ubuntu 上安装的Python版本是Python3 xff0c 而脚本的使用的是p
  • C++面试宝典:__FILE__,__func__,__LINE__

    C语言中 xff0c FILE xff0c func xff0c LINE 常用于logout xff0c debug调试 注意 xff1a 其使用不需要定义 xff0c FILE 指示当前文件名 xff0c func 指示当前函数名 xf
  • C++面试宝典:头文件引用的顺序

    头文件引用的顺序 当我们有多个头文件的时候 xff0c 特定情况下要注意引用的顺序 如果要在文件a h中声明一个在文件b h中定义的变量 xff0c 而不引用b h 那么要在a cpp文件中引用b h文件 xff0c 并且要先引用b h x
  • c++部署yolov5模型

    C 43 43 部署yolov5模型 前言一 准备模型二 Fastdeploy准备三 调用总结 前言 不可否认 xff0c yolov5在目标检测方面大杀四方 xff0c 在 SOTA 榜上留下过万众瞩目的成绩 xff0c 但是官网代码给的
  • 【信息技术】【2004】基于计算机视觉的无人机自主避障系统中的目标跟踪研究

    本文为瑞典皇家理工学院 xff08 作者 xff1a Johan Driessen xff09 的硕士论文 xff0c 共68页 这篇硕士论文的目的是研究利用商用货架 COTS 硬件和免费 公开可用的计算机视觉库开发一个足够有效的实时自主避
  • 将寄存器地址设为宏对寄存器的值进行操作

    将寄存器地址设为宏 对寄存器的值进行操作 搞了半天才捋清楚 首先 定义一个指针变量 int p 再定义一个变量 int q 61 1 将指针p指向q xff1a p 61 amp q 通过指针对改变q的值 xff1a p 61 0x10 此
  • STM32单片机的八种IO口模式,你应该了解下

    STM32单片机的八种IO口模式 xff0c 你应该了解下 八种IO口模式 STM32有八种IO口模式 xff0c 分别是 xff1a 模拟输入 浮空输入 上拉输入 下拉输入 开漏输出 推挽输出 复用开漏输出和复用推挽输出 1 模拟输入 G
  • C语言实现文件复制的两种方法

    一 使用fread 函数和fwrite 函数 span class token macro property span class token directive keyword define span CRT SECURE NO WARN
  • C++开发模板化动态数组CArray类

    1 头文件 span class token comment Array h span span class token macro property span class token directive keyword pragma sp
  • C语言网络族函数htonl()、htons()、inet_addr()、inet_ntoa()实现

    1 htonl htons 函数实现 1 htonl 将主机数转换成无符号长整型的网络字节顺序 2 htons 将主机数转换成无符号短整型的网络字节顺序 span class token macro property span class