节序问题:解析大小的端判定
大小端的判断很简单,可判断了有什么用呢?这是一个难缠的问题,我最近就碰到了这样一个问题,比如,inta=0x12345678,char*p=&a,那么p[0]等于多少呢?答案要么是0x12,要么是0x78,对吧,如果你知道他是小端(因为地球人都知道),那么你肯定就知道p[0]=0x78,呵呵,换句话说,理解大小端对指针的运用还是有一定帮助的。
要判断电脑的大小端,肯定先要理解大小端的概念:
大端模式(Big-Endian),是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,即
小端模式(Little-Endian),是指数据的高位,保存在内存的高地址中,而数据的低位,保存在内存的低地址中,即
这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的
三、判断大小端的方法
方法一(强转):
inti=0x12345678;
charch=(char)i; //强转
if(0x12==ch)
{
//大端
}
if(0x78==ch)
{
//小端
}
方法二(共用体):
unionA{
inti;
charch;
}a;
a.i=0x12345678;
if(0x12==a.ch)
{
//大端
}
if(0x78==a.ch)
{
//小端
}
默认为小端模式
相关文章
- 回溯法(八皇后问题)及C语言实现
- 最详细动态规划解析——背包问题
- 文本分类——常用经典技术解析(jieba,word2vec,样本不平衡问题)「建议收藏」
- 多重部分和问题(dp)
- SkeyePlayer RTSP播放器源码解析系列之H264一帧多NAL写MP4录像花屏问题解决方案
- Android 10 构建系统实战问题解决
- 采用H5多屏直播时,H.264和H.265视频流混合播放导致的卡顿问题解析
- 高并发架构 — 缓存相关问题解析详解架构师
- 问题如何解决Linux软驱故障问题(linux软驱)
- Linux 中遇到无法解析域名问题的解决方法(linux无法解析域名)
- 如何解决MySQL数据库中的索引丢失问题(mysql索引丢失)
- MySQL文本输入遇到回车换行问题这里有简单的解决方法(mysql不能回车换行)
- 解决Oracle汉字不显示的问题(oracle中汉字不显示)
- 解读 Redis 雪崩谜题深度剖析(redis雪崩问题解析)
- 解决Redis长连接切库的经验分享(redis长连接切库问题)
- 解析Redis的返回结果解析1问题(redis返回-1)
- php代码优化及php相关问题总结
- mysql4.1以上版本连接时出现Clientdoesnotsupportauthenticationprotocol问题解决办法
- PHP用SAX解析XML的实现代码与问题分析
- ASP.NET在IE10中无法判断用户已登入及Session丢失问题解决方法
- MySql修改数据库编码为UTF8避免造成乱码问题
- 解析PHP处理换行符的问题rn
- 解析mysql5.5字符集问题
- 解析ADT-20问题androidsupportlibrary
- 解析Android横竖屏切换的问题
- 解析JPA的视图查询问题