作者:Slience_J

原文地址:https://blog.csdn.net/slience_j/article/details/52048267

1、什么是大小端模式?

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

2、知道大小端有何用?

首先要介绍一下字节序列,所谓的字节序列就是大于或者等于两个字节类型的数据存放在内存中的顺序(一个字节就不必谈序列!)。那么什么时候要用到我们去判断机器是大端模式还是小端模式呢?当我们在跨平台开发或者网络编程的时候就要去关心字节序列了,比如说我们用机器A和B通信,如果A和B的端序都是一样的话,中间自然就不用转换来转换去了。但是如果A和B机器的端序不一样,如果我们不去做相应的转换,我们传过去的二进制序列就是反的!

3、如何去判断你的机器是大端模式还是小端模式?

在这里我提供了简单的三个方法,如果有哪里不妥的希望大牛指出。

第一种:

 
#include
int main(int argc, char *argv[])
{
int i = 0x12345678;
char c = i; printf("%x \n", c); return ;
}

注:这种方式的定义一个int型的数据类型,初始化为十六进制0x12345678,在内存中存放的位置从低位到高位,依次为(低位)87654321(高位);再定义一个占一个字节的char型,然后把int型数据赋值给char型数据,因为char占一个字节,int占四个字节,这样赋值就会丢掉三个字节,但是这正是我们需要的,如果它打印出78(小端模式),如果打印出12(大端模式)。

第二种:

#include
int main(int argc, char *argv[])
{
int i = 0x12345678;
char *c = (char *)&i; printf("%x \n", *c); return ;
}

:这种方式和上面那种方式差不多,只是运用到了指针的知识,原理都一样

第三种:

#include

typedef union NODE
{
int i;
char c;
}Node; int main(int argc, char *argv[])
{
Node node; node.i = 0x12345678; printf("%x\n", node.c); return ;
}

注:这种方式运用到了union(共用体),所谓的共用体,就是共同使用一块内存,共用体的大小是共用体中的所有类型最大的哪一个,例如上面的共用体中int是四个字节,char为一个字节,那么这个共用体的大小就是四个字节。当然这个要看你的系统是多少位的(在这里我说的是32位系统,64位系统int是8个字节),先对共用体中的int型数据i赋初值,然后在用char去访问一个字节的数据,如果打印出结果为78(小端模式),反之为大端模式。

C语言怎么简单测试为大小端模式的更多相关文章

  1. 用C语言代码判别CPU的大小端模式

     Big-endian和little-endian是描述排列存储在计算机内存里的字节序列的术语.       Big-endian是一种大值的一端(序列中更典型值)存在前面(在最小的存储地址)的顺序. ...

  2. 经典笔试题:用C写一个函数测试当前机器大小端模式

    “用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 #include <stdio.h> union tes ...

  3. CPU的大小端模式

    不同体系结构的CPU,数据在内存中存放的排列顺序是不一样的. 存储器中对数据的存储是以字节(Byte)为基本单位的,因此,字(Word)和半字(Half-Word)在存储器中就有两种次序,分别称为:大 ...

  4. union关键字及大小端模式

    1. union 关键字 union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在 union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有 ...

  5. CPU大小端模式及转换

    通信协议中的数据传输.数组的存储方式.数据的强制转换等这些都会牵涉到大小端问题. CPU的大端和小端模式很多地方都会用到,但还是有许多朋友不知道,今天暂且普及一下. 一.为什么会有大小端模式之分呢? ...

  6. C/C++ 关于大小端模式

    大端模式:  数据的高字节存在低地址  数据的低字节存在高地址 小端模式:  数据的高字节存在高地址  数据的低字节存在低地址 如图,i为int类型占4个字节,但只有1个字节的值为1,另外3个字节值为 ...

  7. union关键字 与大小端模式

    union 关键字(主要用来压缩空间,如果一些数据不可能同一时间同时用到,可是考虑使用union) union关键字声明的变量称之为联合体变量: (1)联合体变量只配置一个足够大的空间来容纳最大长度的 ...

  8. [20190423]简单测试latch nowilling等待模式.txt

    [20190423]简单测试latch nowilling等待模式.txt --//我对这个问题的理解就是如果参数willing=0,表示无法获取该latch,直接退出,再寻找类似的latch.--/ ...

  9. mips32和x86下的大小端模式判定

    一.背景 1.1 mips32搭载32bit vxworks操作系统 1.2 x86搭载64bit windows10操作系统 二.大小端模式判定前的准备 2.1 先要知道各种架构上各种整型数占据的b ...

随机推荐

  1. PHP用户登录解析

    Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面 的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个 ...

  2. zabbix入门之使用QQ邮箱接受报警信息

    首先说明我使用的是3.2版本的zabbix 既然要发邮件到QQ邮箱报警,那么在centos7上就肯定需要安装发送邮件的软件了 安装应用yum install mailx sendmail -y接着修改 ...

  3. SQL相关语句

    1.分类 数据定义语言(DDL),用来定义数据库.表 列 ,用到的关键字:create.alter.drop. 数据操作语言(DML),数据库进行更行的操作, insert.delete.update ...

  4. benthos v1 的一些新功能

    主要从视频文件截取,暂时github 上还没有很全的相关文档 v1目标 config lint processor error 处理 subprocess processor awk processo ...

  5. 02HDFS架构

    https://www.cnblogs.com/zhoujingyu/p/5040957.html https://blog.csdn.net/firstchange/article/details/ ...

  6. 初始Openwrt

    系统结构 在上一章我们已经完成了刷机工作,这个时候系统进行了首次启动,并且格式化了它的"可写"分区.那么在设备里分区到底是怎么样进行的呢?我们首先需要知道:不同的处理器下OpenW ...

  7. 21 MRO C3算法

    三十九 MRO 多继承的继承顺序 一.python2.2之前用的是   经典类的MRO继承 ①深度递归继承     从左到右 ,一条路走到黑 ②广度继承           一层一层的继承 深度继承时 ...

  8. Js时间格式[转载]

    var myDate = new Date();myDate.getYear();        //获取当前年份(2位)myDate.getFullYear();    //获取完整的年份(4位,1 ...

  9. oracle之 如何 dump logfile

    这篇文章解释了如何在联机或归档重做日志文件中获取转储. 约束和限制:1.数据库必须安装(或打开).更改系统转储日志文件与任何实例无关,因此不需要为其操作安装数据库.但是,在ALTER SYSTEM D ...

  10. spring-IOC容器(一)

    ApplicationContext 代表IOC容器(控制反转) ApplicationContext的主要实现类: ——ClassPathXmlApplicationContext:从类路径下加载配 ...