两种大小端判断的方式

网络通信是按照字节流进行数据交换的,主机根据不同的CPU型号可能是大段存储,也可能是小端存储。而网络字节序在TCP/IP协议中已经规定好了,采用大端的排序方式。
所以网络通信中一般将需要传输的整数型值转换成网络字节序。
从本机字节序转换成网络字节序:host to net short/long

#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);

从网络字节序转换成本机字节序

#include <arpa/inet.h>
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netlshort);

转换的原理其实也很简单,就是判断一下本地是大端还是小端,是大端就转换一下序列,否则啥都不干。
下面介绍两种用来判断大小端的方法:

第一种,使用union

大端是指低字节存储在高地址;小端存储是指低字节存储在低地址。我们可以根据联合体来判断该系统是大端还是小端。因为联合体变量总是从低地址存储。

bool isNetByteOrder()
{union test {int i;char c;};test t;t.i = 1;// 如果是大端,则 t.c 为0x00,则 t.c != 1 返回true// 否则返回falsereturn (t.c != 1);
}

第二种,使用char指针

随意找一个2字节的十六进制数值,如0x1234
如果本地是小端编码,那么12存在高地址,34存在低地址。那么强行把0x1234转换成1字节的char时,高字节会被丢弃,留下低字节值34。
如果本地是大端编码,那么高地址字节种存储的是34,12存在低地址,强制转换成1字节的char时,高字节会被丢弃,留下低字节值12。

bool isNetByteOrder()
{unsigned short mode = 0x1234;char* pmode = (char*) &mode;// 如果将低字节放在低位,则是小端字节序return (*pmode != 0x34);
}

实现htons函数

uint16_t htons(uint16_t hostshort)
{if (isNetByteOrder())return hostshort;else return ((uint16_t)(hostshort >> 8)) | ((uint16_t)((hostshort & 0x00ff) << 8));
}

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

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

相关文章

把数据库复制成脚本(包含远程以及数据库数据)

1.启动VS 2.服务器资源管理器 3.连接需要的数据库 4.右键数据库 选择publist to provider.... 5.剩下的 选择数据库 选择存放地址 下一步 这方法应该是用在把08的数据还原到05上面 明天用这个方法去盗取哈公司的数据库 看行不行转载于:https://www.cnblogs.com/Rock-Lee/a…

代理模式用来初始化的延迟下载

package 设计模式; //代理模式实现延迟加载来减小启动时间 //数据库查询接口 interface IDBQery{ public String request(); }class DBQuery implements IDBQery {//创建一个DBQery非常耗时的&#xff0c;这里面我可以在需要DBQuery的时候在创建public DBQuery(){try {Thread.s…

Linux网络故障排查命令(ifconfig、ping、telnet、netstat、lsof、nc、curl、tcpdump)

目录ifconfig-s&#xff0c;显示网卡信息的精简列表-a、up、down将IP地址绑定到某个网卡&#xff0c;以及解绑操作pingtelnetnetstatlsofnc模拟一个服务器程序和客户端程序进行通信发送文件curltcpdump参数连接一个正常的监听端口ifconfig 该命令用来查看当前系统的网卡和IP地…

My Oracle Support Metalink站点最近将放弃flash界面转而使用ADF HTML

根据oracle官方博客的报道《The New My Oracle Support User Interface (HTML-based) 》&#xff0c; MY ORACLE SUPPORT开发team会在最近将support.oracle.com站点从原来的flash界面迁移到基于ADF HTML的用户界面上。 实际上在2012年的 January 27&#xff0c; MOS开发team就…

BF算法

BF(Brute Force)算法是普通的模式匹配算法&#xff0c;BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配&#xff0c;若相等&#xff0c;则继续比较S的第二个字符和 T的第二个字符&#xff1b;若不相等&#xff0c;则比较S的第二个字符和T的第一个字符&…

心跳检测以及应用层心跳包机制设计

博主联系方式&#xff1a; QQ:1540984562 微信&#xff1a;wxid_nz49532kbh9u22 QQ交流群&#xff1a;750313950&#xff08;嵌入式方向&#xff09; QQ交流群&#xff1a;856398158&#xff08;后端方向&#xff09; 目录心跳检测应用场景死连接情况保活传递有效业务数据心跳包…

【APUE】孤儿进程与僵死进程

基本概念&#xff1a; 在unix/linux中&#xff0c;正常情况下&#xff0c;子进程是通过父进程创建的&#xff0c;子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后&#xff0c…

一个DBA的工作写照

一个DBA的工作写照&#xff0c; 一个DBA的内心 Know the DBA Mind! DBA也是 IT民工啊&#xff0c; 民工何苦为难民工&#xff01; 转载于:https://www.cnblogs.com/macleanoracle/archive/2013/03/19/2968227.html

使用mutex和条件变量实现信号量

c提供了互斥量&#xff1a;mutex和条件变量&#xff1a;condition_variable&#xff0c;但是并没有信号量&#xff1a;semaphore。而linux和windows系统库会提供的。下面简单介绍一下信号量的特性&#xff0c;然后给出一个简单的demo&#xff0c;使用mutex condition_variable…

2014-07-28 使用Axure RP进行手机端BBS的原型设计

今天是在吾索实习的第14天。因本公司的微信公众号需要有一个对外的技术交流平台&#xff0c;所以我们小组打算设计一个手机端的BBS以满足其要求。首先&#xff0c;我们需要做的是进行数据库设计与原型设计&#xff0c;然后提交给经理验收&#xff0c;看看是否合理&#xff0c;是…

jquery exif + lazyload实现延迟加载并显示相片exif信息

对一个摄影爱好者来说&#xff0c;从高手的作品中学习是非常有用的。而照片的光圈&#xff0c;快门&#xff0c;感光度等信息是关注的重点。 上代码&#xff1a; 1 <script src"../js/jquery.js" type"text/javascript"></script>2 <script…

undefined reference to `pthread_create‘(linux下Clion使用thread报错)

完整报错&#xff1a; [ Build | AsyncLogger | Debug ] /snap/clion/169/bin/cmake/linux/bin/cmake --build /home/dyy/CLionProjects/AsyncLogger/cmake-build-debug --target AsyncLogger -- -j 6 [ 50%] Linking CXX executable AsyncLogger /usr/bin/ld: CMakeFiles/Asy…

UVALive 6257 Chemist's vows --一道题的三种解法(模拟,DFS,DP)

题意&#xff1a;给一个元素周期表的元素符号&#xff08;114种&#xff09;&#xff0c;再给一个串&#xff0c;问这个串能否有这些元素符号组成&#xff08;全为小写&#xff09;。 解法1&#xff1a;动态规划 定义&#xff1a;dp[i]表示到 i 这个字符为止&#xff0c;能否有…

.NET开发相关使用工具和框架【转载】

开发类 visual_studio 2005-2012系列----------语言开发工具 Visio 2003 / Power Desiger -----------建模工具 Dreamweaver_CS5 --------------网页设计 ExpressionStudio 4 / blend 4 -------------wpf/silverlight设计工具 开发辅助类 SVN 主程序 ---------------文件控制 I…

JAVA数组的定义及用法

数组是有序数据的集合&#xff0c;数组中的每一个元素具有同样的数组名和下标来唯一地确定数组中的元素。 1. 一维数组 1.1 一维数组的定义 type arrayName[]; type[] arrayName; 当中类型(type)能够为Java中随意的数据类型&#xff0c;包含简单类型组合类型&#xff0c;数组名…

php操作httpsqs

php初始化httpsqs: include_once("httpsqs_client.php");$httpsqs new httpsqs("127.0.0.1", 1218, "mypass123", "utf-8"); php操作httpsqs:常用命令 操作入队&#xff1a; $result $httpsqs->put(xiongwei2, test1); 获取队列中…

异步日志系统设计demo

目录简单版本1优化版本1优化版本2对于QPS要求很高或者对性能有一定要求的服务器程序&#xff0c;同步写日志会对服务的关键性逻辑的快速执行和及时响应带来一定的性能损失&#xff0c;因为写日志时等待磁盘IO完成工作也需要一定时间。为了减少这种损失&#xff0c;一般采用异步…

js unix时间戳转换

一、unix时间戳转普通时间&#xff1a; var unixtime1358932051; var unixTimestamp new Date(unixtime* 1000); commonTime unixTimestamp.toLocaleString(); alert("普通时间为&#xff1a;"commonTime); 二、普通时间转unix时间戳 var str "2013-01-01 00…

hdu 1025(最长非递减子序列的n*log(n)求法)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1025 经典题。。。最长非递减序列的n*log(n)求法。。。orz... View Code 1 #include<iostream>2 const int N500007;3 using namespace std;4 int city[N];5 int dp[N];//dp[i]保存的是长度为i的最长不降…

消息队列重要机制讲解以及MQ设计思路(kafka、rabbitmq、rocketmq)

目录《Kafka篇》简述kafka的架构设计原理&#xff08;入口点&#xff09;消息队列有哪些作用&#xff08;简单&#xff09;消息队列的优缺点&#xff0c;使用场景&#xff08;基础&#xff09;消息队列如何保证消息可靠传输死信队列是什么&#xff1f;延时队列是什么&#xff1…