大端小端数据存储方式

大端:BigEndian 大端模式第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节),高字节在低地址, 低字节在高地址。

小端:LittleEndian  小端模式第一个字节是最低位字节(按照从低地址到高地址的顺序存放数据的低位字节到高位字节),高字节在高地址, 低字节在低地址。

egg: 从内存地址为0x0000开始有以下数据:0x1234abcd

BigEndian:

低地址 --> 高地址

0x0000  0x0001  0x0002  0x0003

0x12    0x34    0xab    0xcd

LittleEndian :

低地址 --> 高地址

0x0000  0x0001  0x0002  0x0003

0xcd    0xab    0x34    0x12

一般操作系统都是小端的,arm大小端都支持,默认是小端模式,STM32是小端模式。

51单片机是大端模式。

时间: 2024-10-04 04:30:37

大端小端数据存储方式的相关文章

大端/小端的存储模式

2017年11月23日大端/小端的存储模式1.大端: 如果是将高字节的数据存储在低地址,低字节数据存储在高地址,这种存储模式就是大端模式:2.小端: 如果是将高字节的数据存储在高地址,低字节数据存储在低地址,这种存储模式就是小端模式:3.对大小端模式的测试方法: 1).使用union共用体进行测试: #include <stdio.h> #include <stdlib.h> //默认为小端模式: //使用共用体测试: union test { int a; char b; };

大端小端(2)

请问下列代码的输出结果有可能是哪些()? #include<stdint.h> #include<stdio.h> union X{     int32_t a;     struct      {          int16_t b;         int16_t c;     }; }; int main() {      X x;     x.a=0x20150810;     printf("%x,%x\n",x.b,x.c);      retur

[小知识]如果使用union判断机器内存是大端序存储还是小端序存储 @ C

比如int i = 1,如果是小端序存储,那么在内存中应该是这样的:0x01 0x00 0x00 0x00:如果是大端序存储的,在内存中应该是:0x00 0x00 0x00 0x01. 那么如何编程来判断机器是大端序存储呢还是小端序存储呢? 上代码: #include <stdio.h> int isBigEndian() { union { int i; char c; }test; test.c = 1; return test.i != 1; } int main() { printf(

大端小端是什么?如何区分?

    今天我们谈谈计算机中的大端小端以及网络中的大端小端.参考了网上好多资料以后,从众多资料中我也按照自己的理解方式,总结一下. 学习一个新东西:我们依然是先了解一下大端小端的历史: 讲故事 这个就需要求救一下度娘,以下故事来自度娘,真假我也不知道,权当听故事: "大端"和"小端"可以追溯到1726年的Jonathan Swift的<格列佛游记>,其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端还是先打破较小的一端而争执不休,甚至爆发了战争.19

大端小端格式详解

1. 什么是大端,什么是小端: 所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中: 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中. 2.为什么会有大小端: 为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit.但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处

栈增长方向与大端/小端问题

转:http://www.cnblogs.com/xkfz007/archive/2012/06/22/2558935.html 栈增长和大端/小端问题是和CPU相关的两个问题.在内存管理中,与栈对应是堆.对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向:对于栈来讲,它的生长方式是向下的,是向着内存地址减小的方向增长.在内存中,“堆”和“栈”共用全部的自由空间,只不过各自的起始地址和增长方向不同,它们之间并没有一个固定的界限,如果在运行时,“堆”和 “栈”增长到发生了相互覆盖时,称为“

大端/小端,高字节/低字节,高地址/低地址,移位运算

其实大端小端的概念比较好理解的,大端:数据的高字节存放在内存的低地址中. 数组的声明方式是从左往右,地址逐渐增大. int8_t a[] = { 1, 2, 3 }; for (int i = 0; i < 3; i++) printf("a[%d]: %p\n", i, &a[i]); a[0]: 0x7ffce52cf290 a[1]: 0x7ffce52cf294 a[2]: 0x7ffce52cf298 int8_t是<stdint.h>定义的跨平台数

socket 大端 小端 转换 (转)《二》

socket 大端 小端 转换 (转)<二> http://blog.csdn.net/kukumouse/article/details/2270356 (1)对于位域结构中的变量来说,其长度不能跨越字节,也就是说不能超过8位.当然如果设置空白位(无名变量,仅仅用作占位的)是没有这个限制的.如果一个字节剩下的位长度不够一个位域,那么从下个字节开始,也可有意置某个位域从下个字节开始.例如: struct bits4_5 {  //一个从到小的存放顺序结构体 unsigned : 10;  //

java内存,大端小端判断

一,简介 在计算机系统中,规定:每个地址单元都会对应一个字节(8个bit),但是,在c语言中, 除了有一个字节(8个bit)的char,也有两个字节(16个bit)的short, 也有四个字节(32个bit)的long(在不同的编译器下可能不同).对于16位或者32位的处理器, 即就是大于8位的处理器,由于寄存器的宽度大于一个字节, 那么就存在如何将一个多字节的变量的数据如何存放的问题——所以,就有了大小端之分. 大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址端