关于大小端

  1. 概念: 大小端是指数据在内存中存储的格式
  2. 原因

在计算机系统中,咱们是以字节为单位的,每一个地址单元都对应着一个字节,一个字节为8bit。可是在C语言中除了8bit的char以外,还有16bit的short型,32bit的long型(要看具体的编译器)。另外,对于位数大于8位的处理器,例如16位或者32位的处理器,因为寄存器宽度大于一个字节,那么必然存在着一个若是将多个字节安排的问题。所以就致使了大端存储模式和小端存储模式。windows

  1. 分类
  • 大端模式(big endian):数据高位存储在内存低地址,低位对应高地址 ;数组

  • 小端模式(little endian):数据高位存储在内存高地址,低位对应低地址 ;网络

  1. 现状

在操做系统中,x86和通常的OS(如windows,FreeBSD,Linux)使用的是小端模式。但好比Mac OS是大端模式。ARM芯片默认采用小端,但能够切换为大端;另外,对于大小端的处理也和编译器的实现有关,在C语言中,默认是小端(但在一些对于单片机的实现中倒是基于大端,好比Keil 51C),Java是平台无关的,默认是大端。在网络上传输数据广泛采用的都是大端。测试

  1. 例子
  • 硬件环境: STM32F407ZG
  • 编译器:keil4
  • 测试分析:0x20002cc8 是数组buf的起始地址,即buf[0]的地址,里面存放的0x78是0x12345678的最低位,所以是小端模式。
  • 测试结果:小端
  1. 参考 百度百科-大小端
相关文章
相关标签/搜索