什么是大端序,小端序??

  • 其实就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了。

举个例子: 一个32位 int 型变量 0x11223344 占用四个字节,11 占用一个,22占用一个,33占用一个,44占用一个;存储的地址为 0x100 0x101 0x102 0x103;那么问题是,11 占用的是哪个字节呢??? 11 占用 0x100这个字节还是,0x103这个字节呢?这时便有了两种方式排序:

如何判断大端序和小端序??

1、大端序:

  • 大端序即数字的高位占用低地址,低位占用高地址,这种也是最符合直觉的

2、小端序:

  • 小端序即数字的低位占用低地址,高位占用高地址

程序实现1:

  • 实现思想:
    1. 定义一个 32 位的 int 型变量,0x11223344
    2. 将这个 int 型变量的低地址开始的 8 位存储的值取出来,取出来的方法就是利用强制类型转换
    3. 如果这个值是 0x11 那么说明低地址存储了值的高位,所以为大端序
    4. 如果这个值是 0x44 那么说明低地址存储了值的低位,所以为小端序

具体代码:

#include "stdio.h"
#include "stdlib.h"// 判断大端还是小端??
// 如果是大端序函数返回 1
// 如果是小端序函数返回 0
int Judge_BS(int n) {// 如果是大端序,数字 n 的低位存储在高地址中// 即 44 存储在高地址中,11 存储在低地址中// 地址: 0x100   0x101   0x102   0x103// 数字:  11      22      33      44// 如果是小端序,数字 n 的低位存储在低地址中// 即 11 存储在高地址中,44 存储再低地址中// 地址:    0x100   0x101   0x102   0x103// 数字:  44      33      22      11// 所以我们可以将32位数字 n 的 低 8 位取出来// 如果低 8 位是 11 则为大端序// 如果低 8 位是 44 则为小端序//此处的地址存储的是低地址char* p = &n;printf("%x\n", *p);printf("%x\n", *(p + 1));printf("%x\n", *(p + 2));printf("%x\n", *(p + 3));// 用 p 获得 32 的低地址,每 8 位打印一次数字,打印结果为// 44 33 22 11// 低地址对应着低位,是小端序char t = *p;if (t == 11) {return 1;}return 0;
}
int main() {int n = 0x11223344;if (Judge_BS(n)) {printf("是大端序!");} else {printf("是小端序!");}system("pause");return 0;
}

程序实现2:

  • 实现思想: 思想基本与第一种方法相同,区别在于这次使用了联合体,利用联合体的共用内存的特点实现。
#include <stdio.h>
#include <stdlib.h>int main() {union Un {int a;char b;} Un;Un.a = 0x11223344;if (Un.b == 0x11) {printf("大端\n");} else {printf("小端\n");}system("pause");return 0;
}

判断 机器是大端还是小端(两种方法)相关推荐

  1. 题目:如何判断一个机器是大端还是小端

    如何判断一个机器是大端还是小端 关于大端小端的概念, 小端:数据的高位字节存放在高地址内,数据的低位字节存放在低地址内. 大端:数据的高位字节存放在低地址内,数据的低位字节存放在高地址内. 典型的体系 ...

  2. 大端和小端的区别,以及如何判断一台机器是大端还是小端?

    如何判断一台机器是大端还是小端 判断方式如下 判断方式如下 采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字 ...

  3. js中判断文本框是否为空的两种方法

    js中判断文本框是否为空的两种方法 //用户名非空验证 function checkUserName(){ var name = document.myform.txtUser; //在这里我认为: ...

  4. 什么是大小端?如何测试某台机器是大端还是小端。

    大小端是指数据在内存中的保存方式. 顾名思义 大小端 就是大端和小端. 大端模式: 所谓的大端模式,是指数据的高字节,保存在内存的低地址中,数据的低字节,保存在内存的高地址中. 低地址存在高位,高地址 ...

  5. linux中判断平台是大端或小端的方法,判断机器大小端的方法

    以前就简单据说过电脑的大小端之分,还有经过程序来判断你的电脑是大端仍是小端.今天在学习网络的时候又接触了大小端,这里就再给你们详细的介绍一下电脑的大小端.node 首先,介绍一下什么是大端什么是小端. ...

  6. 判断CPU是大端还是小端

    #include "stdafx.h" #include <iostream> using namespace std;/* #大端模式(Big_endian):字数据 ...

  7. js 判断数组中是否有重复值两种方法

    判断数组中是否有重复的值,重复则提示优先级重复 第一种方法 推荐 // 以数组值为键,持续向一个对象里面加值,// 如果在加值之前就发现这个属性在对象中已经存在,那么他就是重复的 function i ...

  8. 如何判断无线网卡是否支持5GHz频段【两种方法】

    现在的无线网络速度是蹭蹭的上升,无线路由器也越来越多的加入了5GHz频段的支持,一个巴掌拍不响,光是无线路由器支持5GHz频段,如果无线网卡不支持,也只是白白浪费了这么高的频段.如何判断无线网卡是否支 ...

  9. 平板电脑可以开发php吗,PHP代码判断设备是手机还是平板电脑(两种方法)

    现在移动互联网越来越发达,很多的网站都普及了手机端浏览,为了更好的让网页在手机端显示,我们都选择了使用CSS媒体查询制作响应式模版,但这也有弊端,例如某些网站的结构是CMS类型的,太多的内容要显示,而 ...

最新文章

  1. 函数指针--Nginx和Redis中两种回调函数写法
  2. 水晶报表左侧树不显示属性设置
  3. Bzoj 1046: [HAOI2007]上升序列 二分,递推
  4. html5 填充下拉框,Html5添加实现Bootstrap下拉列表框鼠标滑过时打开的插件教程
  5. 百度地图JavascriptApi Marker平滑移动及车头指向行径方向
  6. 4.API的调用过程(系统服务表)
  7. HBase oldWALs目录文件剧增占用磁盘空间问题
  8. 用qss 来控制qlabel显示字体的位置_Word表格总填不好,这些技巧轻松来拯救
  9. Java数组(1)--数组概述
  10. 如何设置Linux操作系统shell命令的默认语言
  11. java递归遍历删除文件
  12. Python基础知识有哪些?你都知道吗
  13. 影响地图:业务敏捷中你需要掌握的可视化力量
  14. 短命的 CentOS 8 将停止维护
  15. 01. View C++ as a federation of languages
  16. XP系统装python
  17. 视频教程-思科路由器搭建终极实战-网络技术
  18. Android完美实现kitkat透明导航效果
  19. android 6gb和8gb区别,6GB和8GB区别到底有多大?千万别再花冤枉钱了
  20. 基于云开发的校园社区小程序 微信小程序开发实战 课设作业

热门文章

  1. 微信小程序---wxs文件(脚本文件)的解读与使用
  2. unity 双屏,一个UI控制,一个展示
  3. 【报告分享】2021中国咖啡行业发展白皮书-消费界(附下载)
  4. Spring如何整合Mybatis?
  5. 余额宝弱爆了,首支可ATM取现货币基金面世
  6. 腾讯定位服务使用教程Android版
  7. 目前世界上排名前三的计算机,目前世界上排名前十超级计算机叫什么名字,它们各是哪国研制的?...
  8. 常用特征选取算法(转载)
  9. python中返回上一步操作的代码_python基础-文件操作
  10. 高雄/選舉奧步一定告 陳菊律師團強硬