關於大小端

  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. 參考 百度百科-大小端
相關文章
相關標籤/搜索