精华内容
下载资源
问答
  • 运行程序,可判识并输出程序所在平台的存储方式,是大端还是小端
  • 如何确认系统是采用大端还是小端**1、大小**大端(存储)模式:**是指一个数据的低位字节序的内容放在高地址处,高位字节序存的内容放在低地址处。如:一个数0x12345678存放在一个4字节空间里**小端(存储)模式:**是...

    如何确认系统是采用大端还是小端**

    1、大小端

    **大端(存储)模式:**是指一个数据的低位字节序的内容放在高地址处,高位字节序存的内容放在低地址处。

    如:一个数0x12345678存放在一个4字节空间里

    bb1b882d8d61

    **小端(存储)模式:**是指一个数据的低位字节序内容存放在低地址处,高位字节序的内容存放在高地址处。(可以总结为“小小小”即低位、低地址、小端)

    如:一个数0x12345678存放在一个4字节空间里

    bb1b882d8d61

    在计算机系统中,我们是以字节为单位存放数据的,每个地址单元都对应着一个字节,一个字节为8bit。但在C语言中存在不同的数据类型,占用的字节数也各不相同,那么就存在怎样存放多个字节的问题,因此就出现了大端存储模式和小端存储模式。

    大小端是由CPU和操作系统来决定的,在操作系统中,x86和一般的OS(如windows,FreeBSD,Linux)使用的是小端模式,但比如Mac OS是大端模式。

    知道为什么有模式的存在,下面需要了解下具有有什么应用场景:

    1)不同端模式的处理器进行数据传递时必须要考虑端模式的不同

    2)在网络上传输数据时,由于数据传输的两端对应不同的硬件平台,采用的存储字节顺序可能不一致。所以在TCP/IP协议规定了在网络上必须采用网络字节顺序,也就是大端模式。对于char型数据只占一个字节,无所谓大端和小端。而对于非char类型数据,必须在数据发送到网络上之前将其转换成大端模式。接收网络数据时按符合接受主机的环境接收。

    2、如果知道当前系统是采用的什么模式:

    1)

    通过查看一个变量在内存中存放的位置来判断

    int test1_endian() {

    int i = 1;

    char *a = (char *)&i;

    if (*a == 1)

    printf("小端\n");

    else

    printf("大端\n");

    return 0;

    }

    bb1b882d8d61

    2、用联合体

    int test2_endian() {

    union {

    int i;

    char c;

    }un;

    un.i = 1;

    if(un.c == 1) {

    printf("小端");

    }

    else {

    printf("大端");

    }

    return 0;

    }

    bb1b882d8d61

    展开全文
  • 如何确认系统是采用大端还是小端

    千次阅读 2019-11-18 23:02:29
    如何确认系统是采用大端还是小端 1、大小 **大端(存储)模式:**是指一个数据的低位字节序的内容放在高地址处,高位字节序存的内容放在低地址处。 如:一个数0x12345678存放在一个4字节空间里 **小端(存储)...

    如何确认系统是采用大端还是小端

    1、大小端

    **大端(存储)模式:**是指一个数据的低位字节序的内容放在高地址处,高位字节序存的内容放在低地址处。
    如:一个数0x12345678存放在一个4字节空间里
    在这里插入图片描述
    **小端(存储)模式:**是指一个数据的低位字节序内容存放在低地址处,高位字节序的内容存放在高地址处。(可以总结为“小小小”即低位、低地址、小端)
    如:一个数0x12345678存放在一个4字节空间里
    在这里插入图片描述

      在计算机系统中,我们是以字节为单位存放数据的,每个地址单元都对应着一个字节,一个字节为8bit。但在C语言中存在不同的数据类型,占用的字节数也各不相同,那么就存在怎样存放多个字节的问题,因此就出现了大端存储模式和小端存储模式。
    
     大小端是由CPU和操作系统来决定的,在操作系统中,x86和一般的OS(如windows,FreeBSD,Linux)使用的是小端模式,但比如Mac OS是大端模式。
    

    知道为什么有模式的存在,下面需要了解下具有有什么应用场景:

    1)不同端模式的处理器进行数据传递时必须要考虑端模式的不同

    2)在网络上传输数据时,由于数据传输的两端对应不同的硬件平台,采用的存储字节顺序可能不一致。所以在TCP/IP协议规定了在网络上必须采用网络字节顺序,也就是大端模式。对于char型数据只占一个字节,无所谓大端和小端。而对于非char类型数据,必须在数据发送到网络上之前将其转换成大端模式。接收网络数据时按符合接受主机的环境接收。

    2、如果知道当前系统是采用的什么模式:

    1)
    通过查看一个变量在内存中存放的位置来判断

    
    
    int test1_endian() {
        int i = 1;
        char *a = (char *)&i;
        if (*a == 1)
             printf("小端\n");
        else
             printf("大端\n");
        return 0;
    }
    
    

    在这里插入图片描述

    2、用联合体

    int test2_endian() {
           union {
                  int i;
                  char c;
           }un;
           un.i = 1;
           if(un.c == 1) {
                  printf("小端");
           }
           else {
                  printf("大端");
           }
           return 0;
    }
    
    

    在这里插入图片描述

    展开全文
  • 利用这一特点,可以用联合体变量判断ARM或x86环境下,存储系统是是大端还是小端模式。#include "stdio.h"int main(){union w{int a;//4 byteschar b; //1 byte} c;c.a=1;if (c.b==1)printf("It is Little_en...

    在C语言中,不同于结构体,共用体(联合体)中的几种不同类型的变量存放在同一段内存单元中。利用这一特点,可以用联合体变量判断ARM或x86环境下,存储系统是是大端还是小端模式。

    #include "stdio.h"

    int main()

    {

    union w

    {

    int a; //4 bytes

    char b; //1 byte

    } c;

    c.a=1;

    if (c.b==1)

    printf("It is Little_endian!\n");

    else

    printf("It is Big_endian!\n");

    return 1;

    }

    说明:

    1 在c中,联合体(共用体)的数据成员都是从低地址开始存放。

    2 若是小端模式,由低地址到高地址c.a存放为0x01 00 00 00,c.b被赋值为0x01;

    ————————————————————————————

    地址 0x00000000 0x00000001 0x00000002 0x00000003

    管理员在2009年8月13日编辑了该文章文章。

    测试CPU是大端Big endian 还是小端Little Endian的C代码

    2012年11月29日

    看周立功的《C程序设计高级教程》做的笔记。这本书还不错,已经帮我搞清楚了几个以前比较迷糊的概念。

    一、关于大端Big Endian和小端Little Endian的概念

    对于单一的字节(a byte),大部分处理器以相同的顺序处理位元(bit),因此单字节的存放方法和传输方式一般相同。对于多字节的数据,如int,long,有大端和小端之分。

    最低有效位(Least Significant Bit, LSB)表示数的最低位。

    最高有效位(Most Significant Bit, MSB)表示数的最高位。对于带符号数来说,最高位就是符号位。比如int 类型的“5”在32位机器上的表示为:0000 0000 0000 0000 0000 0000 0000 0101,其中,最左边的一位0是符号位,即MSB = 0; 最右边的”1“是数的最低有效位,即LSB = 1。

    注意:MSB(全大写)有时也指the Most Significant Byte,最高有效字节,指多字节序列中具有最大权重的字节。

    大端模式:即将数据的最高有效字节MSB存放在低地址单元中,将最低有效字节LSB存放在高地址单元中。那么数据的地址就是MSB所在的地址。如图所示:

    0818b9ca8b590ca3270a3433284dd417.png

    小端模式:即将数据的最低有效字节LSB存放在低地址单元中,将最高有效字节MSB存放在高地址单元中。那么数据的地址就是LSB所在的地址。如图所示:

    0818b9ca8b590ca3270a3433284dd417.png

    二大小端测试代码原理:

    如果将任何类型的对象指针强制转换为指向任何char类型的指针,其结果就是”指向对象的第一个字节“的指针。无论系统的字节次序结构如何,这里所认定的第一个字节就是地址最低的那个字节。代码如下:

    展开全文
  • 如何判断CPU是大端还是小端模式 2010-12-03 23:35:25 分类: C/C++ 在ARM体系中,每个字单元包含4个字节单元或者两个半字单元。在字单元中,4个字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式:big-...
     
    

    分类: C/C++

    在ARM体系中,每个字单元包含4个字节单元或者两个半字单元。在字单元中,4个字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式:big-endian和little-endian格式。在小端模式中,低位字节放在低地址,高位字节放在高地址;在大端模式中,低位字节放在高地址,高位字节放在低地址。

    在C语言中,不同于结构体,共用体(联合体)中的几种不同类型的变量存放在同一段内存单元中。利用这一特点,可以用联合体变量判断ARM或x86环境下,存储系统是是大端还是小端模式。

    #include "stdio.h"
    int main()
    {
      union w
     {
      int a;  //4 bytes
      char b; //1 byte
     } c;
      c.a=1;
      if (c.b==1)
      printf("It is Little_endian!\n");
      else
      printf("It is Big_endian!\n");
      return 1;
    }
    说明:
    在c中,联合体(共用体)的数据成员都是从低地址开始存放。
    若是小端模式,由低地址到高地址c.a存放为0x01 00 00 00,c.b被赋值为0x01;

      ————————————————————————————

       地址 0x00000000 0x00000001 0x00000002 0x00000003

    管理员在2009年8月13日编辑了该文章文章。



















    测试CPU是大端Big endian 还是小端Little Endian的C代码
    2012年11月29日 linux c/c++⁄ 共 899字 暂无评论 ⁄ 被围观 842 views+

    看周立功的《C程序设计高级教程》做的笔记。这本书还不错,已经帮我搞清楚了几个以前比较迷糊的概念。

    一、关于大端Big Endian和小端Little Endian的概念

    对于单一的字节(a byte),大部分处理器以相同的顺序处理位元(bit),因此单字节的存放方法和传输方式一般相同。对于多字节的数据,如int,long,有大端和小端之分。

    最低有效位(Least Significant Bit, LSB)表示数的最低位。

    最高有效位(Most Significant Bit, MSB)表示数的最高位。对于带符号数来说,最高位就是符号位。比如int 类型的“5”在32位机器上的表示为:0000 0000 0000 0000 0000 0000 0000 0101,其中,最左边的一位0是符号位,即MSB = 0; 最右边的”1“是数的最低有效位,即LSB = 1。

    注意:MSB(全大写)有时也指the Most Significant Byte,最高有效字节,指多字节序列中具有最大权重的字节。

    大端模式:即将数据的最高有效字节MSB存放在低地址单元中,将最低有效字节LSB存放在高地址单元中。那么数据的地址就是MSB所在的地址。如图所示:

    小端模式:即将数据的最低有效字节LSB存放在低地址单元中,将最高有效字节MSB存放在高地址单元中。那么数据的地址就是LSB所在的地址。如图所示:

    二大小端测试代码原理:

    如果将任何类型的对象指针强制转换为指向任何char类型的指针,其结果就是”指向对象的第一个字节“的指针。无论系统的字节次序结构如何,这里所认定的第一个字节就是地址最低的那个字节。代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include<stdio.h>
     
    int main()
    {
         unsigned int uiTest;
         unsigned char *pucTmp = NULL;
     
         uiTest = 0x12345678;
         pucTmp = (unsigned char *)&uiTest; //指向&uiTest的第一个字节
     
         if (*pucTmp == 0x78)
         {
             printf ( "This is Little Endian\n" );
         }
         else
         {
             printf ( "This is Big Endian\n" );
         }
     
         return 0;
    }

    展开全文
  • CPU大端还是小端

    2013-10-10 16:11:57
    利用这一特点,可以用联合体变量判断ARM或x86环境下,存储系统是是大端还是小端模式。 #include "stdio.h" int main() {  union w  {  int a; //4 bytes  char b; //1 byte  } c;  c.a=1;  i
  • 简单的判断大端还是小端 字节序
  • 大端小端

    2017-09-12 21:01:27
    什么是 大端什么是小端?如何判断一个机器是大端还是小端机?一、大端小端概念
  • 小端模式中,低位字节放在低地址,高位字节放在高地址;在大端模式中,低位字节放在高地址,高位字节放在低地址。...利用这一特点,可以用联合体变量判断ARM或x86环境下,存储系统是是大端还是小端模式...
  • 大端还是小端

    2010-10-31 22:29:00
    x86系列CPU都是little-endian的字节序.   1 #include  2  3 int main()  4 {  5 int x=1;  6   /*the first method */  7 if(*(char *) &x==1)  8 printf("little/n"); ...
  • 一、什么是大端 Or 小端?  在直接对内存操作的时候,知道所使用CPU存放数据顺序是非常重要的,尤其是存取网络数据的时候。一般有两种顺序 Big endian(大端模式),一种是Little endian(小端模式)。大端模式就是...
  • Linux_c 编程——判断电脑是大端还是小端
  • 比如0x12345678在大端机上是12345678,在小端机上是78564312,而一个主机是大端还是小端要看cpu类型以及运行在上面的操作系统。同一款cpu在不同的操作系统使用的大小情况是不同的。当然我们通常使用的x86+windows...
  •  或许你曾经仔细了解过什么是大端小端,也动手编写了测试手头上的机器上是大端还是小端的程序,甚至还编写了大端小端转换程序;但过了一段时间之后,当你再看到大端小端这两个字眼,你的脑中很快浮起了自己曾经做...
  • 比如 0x12345678 在大端机上是 12345678,在小端机上是 78564312,而一个主机是大端还是小端要看CPU类型以及运行在上面的操作系统。同一款CPU在不同的操作系统使用的大小情况是不同的。当然我们通常使用的 x86 + ...
  • 比如0x11223344在大端机上是11223344,在小端机上是44332211,而一个机器是大端还是小端要看cpu类型以及运行在上面的操作系统。同一款cpu在不同的操作系统使用的大小情况是不同的。当然我们通常使用的x86+windows...
  • 大端模式小端模式

    万次阅读 2017-03-30 14:41:35
    介绍大端小端的知识
  • 如何判断一个机器是大端还是小端   关于大端小端的概念,  小端:数据的高位字节存放在高地址内,数据的低位字节存放在低地址内。  大端:数据的高位字节存放在低地址内,数据的低位字节存放在高地址内。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,767
精华内容 2,706
关键字:

x86大端还是小端