htonl, ntohl两种实现
#include <stdio.h>/*小端模式数据的低位放在低地址空间,数据的高位放在高地址空间大端模式数据的高位放在低地址空间,数据的低位放在高地址空间
*/
bool IsLittle()//判断主机序是否为小端
{short a = 0x0001;//小数据为0x01,高数据为0x00return *(char*)&a == 0x01; //低地址放小数据
}long Htonl(long a)
{long b = 0;/*小端 从低地址*/if (!IsLittle())//大端return a;for (int i = 0; i < sizeof(a); i++)//小端:0x12345678->0x78563412{ //处理单位为字节,1字节8位// b 左移 把 低地址转成高地址b = (b << 8) | (a & 0xff);a >>= 8;}return b;
}long Ntohl(long a) {long b = 0;if (!IsLittle()) return a;// 实现都一样for (int i = 0; i < sizeof(a); i++)//0x 78 56 34 12 -> 0x 12 34 56 78{ b = (b << 8) | (a & 0xff);a >>= 8;}return b;
}
typedef unsigned short int uint16;typedef unsigned long int uint32;#define BigLittleSwap32(A) ((((uint32)(A) & 0xff000000) >> 24) | (((uint32)(A) & 0x00ff0000) >> 8) | (((uint32)(A) & 0x0000ff00) << 8) | (((uint32)(A) & 0x000000ff) << 24))int main()
{//读数据永远是从低地址开始的!!!// 00000000 00000000 00000000 00000004// 00 00 00 04// 低地址 -> 高地址// 04 00 00 00int a = 4;/*78 56 34 12 Htonl () ->12 34 56 78*/printf("%x\n", Htonl(0x12345678));printf("%x\n", BigLittleSwap32(0x12345678));printf("%x\n", BigLittleSwap32(0x78563412));printf("%x\n", Ntohl(0x78563412));return 0;
}
htonl, ntohl两种实现相关推荐
- 两种大小端判断的方式
网络通信是按照字节流进行数据交换的,主机根据不同的CPU型号可能是大段存储,也可能是小端存储.而网络字节序在TCP/IP协议中已经规定好了,采用大端的排序方式. 所以网络通信中一般将需要传输的整数型值 ...
- htonl(), ntohl(), htons(), ntohs() 函数
转自:http://www.cnblogs.com/s7vens/archive/2011/12/12/2284892.html 在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题 ...
- htonl(), ntohl(), htons(), ntohs() 函数具体应用
htons和htonl函数具体应用 htons和htonl函数,是用来将主机字节顺序转换为网络字节顺序 在进行网络抓包时,抓到的包的数据是网络字节顺序,在进行编程时,要进行主机字节顺序和网络字节顺序间 ...
- htonl ntohl htons ntohs
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题. 这时就可能用到htons(), ntohl(), ntohs(),htons()这4个网络字节顺序与本地字节顺序之间的转换函数 ...
- 网络字节顺序和主机字节顺序的转换(htons ntohs htonl ntohl)
from https://blog.csdn.net/baidu_33621692/article/details/53213002 网络字节顺序和主机字节顺序的转换(htons ntohs hto ...
- C/C++htonl(), ntohl(), ntohs(),htons()
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数. 网络字节顺序与本地字节顺序之间的转 ...
- 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题
继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...
- tornado 异步两种实现形式 通过回调可以利用
两种实现异步的方式 通过回调可以返回自己的数据
- Pytorch两种模型保存方式
以字典方式保存,更容易解析和可视化 Pytorch两种模型保存方式 大黑_7e1b关注 2019.02.12 17:49:35字数 13阅读 5,907 只保存模型参数 # 保存 torch.save ...
最新文章
- JS中的let和var的区别
- WordPress 短代码集
- 直接上干货!技术水平真的很重要!复习指南
- minio 文件预览_Minio使用说明
- Microsoft .NET Micro Framework Training conducted by Sean Liming (上海)
- html5 video mute按钮,How to mute an html5 video player
- Palo Alto推出全新Traps高级终端功能,强化勒索软件防御优势
- CSM (Compatility Suport Module)兼容支持模块
- python画指数函数图像_如何使用python的matplotlib模块画指数函数图像
- win7系统更换锁屏壁纸
- Electron修改图标
- 网络计算机不能打印,如果共享打印机后局域网计算机无法打印,该怎么办?
- 5G时代来临,电影行业面临的机遇与挑战
- 【舒利迭】 沙美特罗替卡松粉吸入剂 (50微克 250微克)
- unity UI 跟随3D物体移动
- Excel超实用办公技巧,迅速提高办公效率
- 长短期记忆人工神经网络(LSTM)及其tensorflow代码应用
- Jacobian矩阵的理解
- 引热议!多所高校明文规定:不再给部分全日制研究生安排宿舍
- Python——迷宫生成和迷宫破解算法
热门文章
- 旅游网案例:旅游线路名称查询
- 从网上购物者角度看购物商城广告的推广模式
- Delving into Localization Errors for Monocular 3D Object Detection 论文学习
- 微机原理和计算机组成原理一样吗_「连载」信息技术基础题型归纳之计算机组成原理3...
- 使用cmd命令查看电脑是不是翻新机 如何查看自己电脑是不是翻新机
- JavaScript恶意代码
- mysql主从遇故障自动切换_mysql主宕机,主从故障切换(一主多从)
- privat,pubic的区别
- 程序员-开发工作流程英文术语
- VN服务器IP地址切换,客户端连接解决方案!