当前位置: 首页 > news >正文

解题-写一个程序判断当前机器的大小端存储模式 #两种方法

文章目录

前言

一、思考

二、解题

方法一:

方法二:

总结


前言

路漫漫其修远,吾将上下而求索。


想要更加详细地了解大小端字节序的相关知识可以戳此链接:http://t.csdnimg.cn/oZXDP

一、思考

”大小端字节序“中的”大小端“可以理解为数据在内存中排列顺序的问题,而”字节序“则是由于内存单元的大小为 1byte,当数据大于 1byte 的时候,就存在每一个大小为1字节数据之间顺序问题(以字节为单位讨论数据在内存中的存储顺序);

  • 大端字节序:将高位字节序的数据放到低地址处,低位字节序的数据放在高地址处;
  • 小端字节序:将低位字节序的数据放在低地址处,高位字节序的数据放在高地址处;

以在内存中存储 int i = 0x11223344; 为例来具体分析:

数据在内存中的存储的顺序关系是在以字节大小的空间之间的顺序问题,即内存单元中存放数据顺序的问题;

显然,聪明的你可能会想到使用int i =  0x00000001  ;然后看变量 i 其第一个字节空间的大小;为1 则说明为小端字节序; 为0 则说明为大端字节序;

二、解题

方法一:

如上思考分析

代码如下:

#include<stdio.h>int CheakSys()
{int i = 1;return *((char*)&i);
}
int main()
{//方法一int ret = CheakSys();if (ret == 0)printf("当前机器采用的是大端字节序\n");elseprintf("当前机器采用的是小端字节序\n");return 0;
}

在VS编译器下执行结果如下:

方法二:

思路和方法一如出一辙,但是解决方法的形式不同;

看了方法一,其核心就是:

整型变量会向内存申请 4 byte 的空间来存放数据,此时给这个变量一个值 :1 ; 然后取其第一个字节空间的数据看是0还是1;

是0则为大端字节序,因为大端字节序存储模式会将低位字节序的数据放在高地址处;

而若是1,则就为小端字节序,因为小端字节序的存储模式会将低位字节序的数据放在低地址处;

大体给人的轮廓的感觉就是,用4 byte 大小的空间存放 0x00 00 00 01 , 结果就取出它处于较低地址处一个字节空间的数据,聪明的你可能会联想到使用联合

联合,又称为共用体,即其成员共同使用空间;

代码如下:

//方法二:利用联合#include<stdio.h>int CheakSys()
{union Un{int i;char c;}u;u.i = 1;return u.c;
}int main()
{int ret = CheakSys();if (ret == 0)printf("当前机器采用的是大端字节序\n");elseprintf("当前机器采用的是小端字节序\n");return 0;
}

在VS编译器下执行结果如下:


总结

核心:整型变量会向内存申请 4 byte 的空间来存放数据,此时给这个变量一个值 :1 ; 然后取其第一个字节空间的数据看是0还是1;


http://www.mrgr.cn/news/15877.html

相关文章:

  • SpringCloud乐尚代驾学习笔记:司机端登录(四)
  • 【化学方程式配平 / 3】
  • 笔记:应用Visual Studio Profiler分析CPU使用情况
  • Python数据分析的数据导入和导出
  • 「数组」二分查找模版|二段性分析|恢复二段性/ LeetCode 35|33|81(C++)
  • Python中的“break”与“continue”:控制循环的艺术
  • DDR test Tool for imx9
  • 【Python篇】Python 类和对象:详细讲解(上篇)
  • 生产环境中变态开启devtools(强制)
  • classA cla= ...; if(cla == nullptr) 这种写法是否安全
  • 远程教学必备神器:热门远程控制软件大盘点
  • Vue3.0教程001:Vue3简介
  • 一些零碎的关于合约测试,ERC20调用的知识
  • python基础(14内置函数介绍)
  • 第22周:调用Gensim库训练Word2Vec模型
  • 掌握SQL数据分割技巧:垂直与水平分割全解析
  • flume系列之:批量并行启动、停止、重启flume agent组
  • 【Linux】在 bash shell 环境下,当一命令正在执行时,按下 control-Z 会?
  • 【干货分享!】十五届蓝桥杯单片机国一经验分享
  • 【数学建模经验贴】数模的意义,并不只在于获奖,而在于历练!