在计算机系统中,存储是以字节为单位的,每个地址单元都对应着一个字节,一个字节=8bit。在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器)。对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,如何安排多个字节的存储,这就有了大端存储模式和小端存储模式。

小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址。 大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。 如果将一个16位的整数0x1234存放到一个短整型变量(short)中。这个短整型变量在内存中的存储在大小端模式由下表所示。

地址偏移

大端模式

小端模式

0x00

12(OP0)

34(OP1)

0x01

34(OP1)

12(OP0)

小端模式:强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。

大端模式:符号位的判定固定为第一个字节,容易判断正负。

常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。

什么时候要进行大小端字节序的转换? 

short 或者 long的数据在进行通信的时候最好养成:  1、发送的时候使用:htons(l)  2、接受的时候使用:ntohs(l)  而不要理会两边的通信是否需要这么做~~  当然了一般我都不用int型的数据通信,从来都是字符串通信,发送方利用sprintf组织,接收方利用atoi进行转换~~

C语言判断大小端模式

方法一:

void IsBigEndian()
{short int a = 0x1122;//十六进制,一个数值占4位char b =  *(char *)&a;  //通过将short(2字节)强制类型转换成char单字节,b指向a的起始字节(低字节)if( b == 0x11)//低字节存的是数据的高字节数据
 {//是大端模式
 }else{//是小端模式
 }
}

方法二:

void IsBigEndian()//原理:联合体union的存放顺序是所有成员都从低地址开始存放,而且所有成员共享存储空间
{union temp{short int a;char b;}temp;temp.a = 0x1234;if( temp.b == 0x12 )//低字节存的是数据的高字节数据
 {//是大端模式
 }else{//是小端模式
 }
}

转载于:https://www.cnblogs.com/clumsy1006/p/5322348.html

大小端存储模式的理解和判断相关推荐

  1. 计算机的大小端存储模式(计算机小白必看!)

    目录 1.什么是大端小端 2.为什么会有大小端模式之分呢? 3.如何判断当前机器为大端字节序还是小端字节序 本文将介绍计算机存储数据时的大小端问题 1.什么是大端小端 大端(存储)模式,是指数据的低位 ...

  2. 大端小端存储模式详解及判断方法

    文章目录 大小端模式的概念 两种模式出现原因 两种模式的优劣 大小端的应用情景 判断机器的字节序 大小端模式的概念 当我们查看数据在内存中的存储情况时,我们经常会发现一个很奇怪的现象,什么现象呢? i ...

  3. 数据存储之大小端存储模式

    我们知道变量的创建是要在内存中开辟空间,而空间的大小是根据不同的类型来决定的.那么数据在所开辟的内存中到底是如何存储的呢? 先来看一下下面的整数在内存中是怎样存储的 在计算机中整数有三种表达方式,即原 ...

  4. 大端和小端存储模式解析

    一.大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的<格利佛游记>:Lilliput和Blefuscu这两个强国在过去的36个月中一 ...

  5. 大端模式与小端模式的理解以及判断方法

    1. 为什么会有大端模式和小端模式 在计算机中,我们知道数据是按照字节存储的,如果数据都是单字节存储,就不涉及存储顺序的问题.但是,大多数情况下,数据不是按照单字节的方式存储的,例如会有类似于int, ...

  6. java 大小端字节序_理解大小端字节序

    学过编程的人都应该知道大小端字节序的概念,但是很多时候,总是把他们弄混,这是整理出来的一份很简单的方式理解字节序的文章,废话不多说,这里直接入正题. 什么是字节序? 字节序,简单来说,就是指的超过一个 ...

  7. 计算机网络:大小端存储

    #include <stdlib.h> #include <stdio.h>union un{int a;char b; };int main(){union un myun; ...

  8. ARM存储器的大小端存储方式

    大端格式和小端格式是两种存储字数据的方法.具体讲是在ARM体系的嵌入式系统结构中存储器存放数据的两种叫法,在嵌入式体系结构中将存储器看作是从零地址开始的字节的线性组合.从第0~3字节放置第一个存储的字 ...

  9. c语言联合验证大小端存储,2021C语言面试题及答案.docx

    1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三 个明显的作用:1)-在函数体,一个被声明为静态的变量在这一函数被调用过 程中维持其值不变.2 ...

最新文章

  1. tabBar 自定义,小程序自定义底部导航栏
  2. java keytool 导入证书_java - Keytool无法导入证书 - SO中文参考 - www.soinside.com
  3. 牛客题霸 SQL5 查找所有员工的last_name和first_name以及对应部门编号dept_no
  4. 华为鲁勇:华为5G专利数量全球第一 比美国所有企业还多
  5. git和python交互_使用Python连接和执行GIT命令
  6. 如何让网站文章秒收录
  7. sql高级语法之case语句
  8. Unix环境高级编程(十)信号续
  9. 计算机二级C语言选择题——01
  10. Putty(菩提)远程连接服务器教程听语音
  11. 什么是ubuntu ?
  12. 电子签名java上上签_电子签名怎么用才能合法合规呢?
  13. 【unity学习笔记-如何给动态的人物添加碰撞体】
  14. 《职业教育研究》(月刊)投稿经验分享
  15. 从源码角度了解react工作原理
  16. 移动互联及大数据“路路拍”上线仪式——圆满成功
  17. 模仿360buy商品比较的jquery插件
  18. c语言大作业开题报告,C语言大作业报告.doc
  19. 各类网红级产品荟聚,硅步机器人专业ROS交流会,近距离产品体验,快来报名吧
  20. 【论文阅读】R3Det

热门文章

  1. 2022-2028年中国刀具行业投资分析及前景预测报告
  2. 数据库 user schema sqlserver 关系
  3. LeetCode简单题之将所有数字用字符替换
  4. 深度学习编译与优化Deep Learning Compiler and Optimizer
  5. 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态
  6. 简化可视SLAM应用程序的开发
  7. 为什么UI线程中创建Handler可以不传Looper?
  8. 客快物流大数据项目(五十):项目框架初始化
  9. 2021年大数据ELK(二十六):探索数据(Discovery)
  10. 2021年大数据ELK(十六):Elasticsearch SQL(职位查询案例)