什么是大小端?

大小端又被成为 大端字节序小端字节序 。大小端其实指的就是在数据如何存到内存中的方式。

大端(存储)模式 是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中

小端(存储)模式 :是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中

接下来 来看一个数据 0x12345678 在不同模式下的存储方式:

图1

在 VS 的编译环境下:

图2

可以清晰的看到 a 在内存中的存储情况。a 的高位字节 0x12 存在了内存 0x00B1FE57,

而低位字节 0x78 存在了内存 0x00B1FE54

故在此环境下内存的存储方式是 小端存储 ,同理大端字节序存储方式也是类似的。


那么如何记忆呢?

1. 大端不变小端变(内存从低到高,大端存储数据和原数据一样放入;小端则倒序放入)

2. 低字节存低地址是小端;低字节存高地址是大端


如何写一个程序判断当前环境是大端还是小端存储方式?

首先已经知道了数据在内存中存储的方式。为了方便计算取数字 1 来举例。

内存低地址-------------------->内存高地址

在 大端中  0x 00 00 00 01

在 小端中  0x 01 00 00 00

所以只要写一个程序能够取出数据的第一个字节,如果取出的是 1 说明是小端;0 则是大端

下面提供两种方法:

//方法一: 用 char* 访问一个字节的方法
int main()
{int a = 1;char* p = (char*)&a;if (*p == 1)printf("小端\n");elseprintf("大端\n");return 0;
}//方法二: 用 联合体 共用一块空间的方法
union
{char c;int i;
}un;
int main()
{int a = 1;un.i = 1;if (un.c == 1)printf("小端\n");elseprintf("大端\n");return 0;
}

再将上面两种方法封装一下,封装成判断大小端函数。

//返回1是小端 返回0是大端
int check1()
{int a = 1;return *(char*)&a;
}int check2()
{union{char c;int i;}un;un.i = 1;return un.c;
}int main()
{int ret = check1();if(ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}

以上就是判断大小端的方法,当有两个字节以上数据才会有大小端的排序。

什么是大小端,如何写程序判断大小端?相关推荐

  1. 编写程序判断大小端的两种方法

    大小端这个问题在面试过程中偶尔会被问到,这里笔者总结了一下,提出了两个小程序进行判断,欢迎大伙 查看指教 第一种:联合(union)方式判断法 在union中所有的数据成员共用一个空间,同一时间只能储 ...

  2. html5 移动端手写签名,H5移动端项目实现手写签名功能 vue实现手写签名

    vue 移动端实现手写签名效果,功能很完美,保存时保存为base64格式. 刚好项目用到此功能,就网上找了一下,清理了无用代码,简单方便,因为项目中多个地方需要使用,所以我将它整理为组件,通过ref和 ...

  3. 大端与小端以及如何判断大小端

    大端:将表示一个对象的字节在内存中按照从最高有效字节到最低有效字节的顺序存储,即最高有效字节在内存地址最前面的方式,称为大端法 小端:将表示一个对象的字节在内存中按照从最低有效字节到最高有效字节的顺序 ...

  4. C语言程序判断计算机的CPU大小端

    如何判断一台计算机的CPU是大端还是小字端对齐呢? 那么首先得了解何为大端,何为小端,明确一下概念. 所谓大端模式,是指字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中. 小端格式:与大 ...

  5. 封装利用libwebsockets写出的客户端、服务端程序为客户端服务端类

    封装利用libwebsockets写出的客户端.服务端程序为客户端服务端类 文章目录 封装利用libwebsockets写出的客户端.服务端程序为客户端服务端类 1.封装 2.封装后写wss客户端.服 ...

  6. Linux一句命令之判断大小端序

    笔者在开发Linux应用程序时,由于判断大小端序的问题,使用的方法是用C语言判断,方法是可以判断得到系统是什么端序,但是太麻烦了.笔者是比较懒的人,不想写那么多代码,想一句命令就解决端序判断的问题. ...

  7. 【一雪前耻!】两种方法判断大小端模式

    废话不多说,直接上代码. 法一:指针法 #include <stdio.h>int main(){int a = 1;char p = *((char *) &a); ///< ...

  8. 判断身份证:要么是15位,要么是18位,最后一位可以为字母,并写程序提出其中的年月日

    package com.demo;public class Demo3 {public static void main(String[] args) {/** 判断身份证:要么是15位,要么是18位 ...

  9. 什么是大小端?如何判断大小端

    通过上篇文章,我们知道了整形变量在内存中是以二进制方式存储的,今天我们来聊一聊,它的存储顺序(大小端) 目录 一.什么是大小端? 二.如何判断是大端存储还是小端存储 对于一个由2个字节组成的16进制整 ...

最新文章

  1. JForum 的 SSO集成
  2. 浏览器HTTP缓存机制
  3. 这位中国小伙 6个月用比特币攒了125个亿 !
  4. matlab验证对称三相电路,不对称三相电路中,中线的电流为()。 A.0 B. C. D....
  5. 梅林安装opkg后安装iperf3_MacBook安装双系统后手势触控问题
  6. java通过ldap添加用户后_ldap连接不上改用户_JAVA通过LDAP做用户登录认证,怎么做业务的异常处理?...
  7. Jetty架构解析及应用示例
  8. 局域网聊天软件的设计思路
  9. java extends原则_Java泛型extends及super区别实例解析
  10. 初步接触Oracle 11g(1)
  11. windows内置的linux安卓驱动多系统摆脱虚拟机(上)
  12. oracle安装后怎么用plsql连接,oracle11g安装和使用PLSQL连接
  13. 如何成为一名网络工程师
  14. oracle11g服务配置,oracle11g dg broker配置服务的高可用
  15. linux下qt网络编程 qnetworkreply,QT网络编程之文件下载 QNetworkRequest QNetworkReply QNetworkAccessManager...
  16. 【C++】简易GIF生成器(斗图神器!必备!!!)持续更新~
  17. 解决Sqlite Developer过期的办法
  18. Server、Workstation服务无法启动(导致无法访问共享)
  19. fmpeg分析视频gop的大小
  20. iOS微信第三方登录实现

热门文章

  1. 噪声来源、定义及影响【转自微信公众号微波射频网】
  2. 【赛百味加入区块链试验项目以提高食品供应链透明度】GBCAX
  3. 如何获得凤凰网或腾讯视频链接并下载到本地
  4. Ubuntu16.04+智能车+YOLO
  5. 在国内如何使用gmail_如何在Gmail中召回电子邮件
  6. SAP FICO CBS接口-银企直连联盟收款功能开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)
  7. python股票接口_股市python接口
  8. 用1元钱买到原价万元的电脑是什么体验?
  9. 面试官:Java8 lambda 表达式 forEach 如何提前终止?
  10. antd中reset为啥点击两次