浅析Endian(字节序问题)
生活随笔
收集整理的這篇文章主要介紹了
浅析Endian(字节序问题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、背景?
自Jonathan Swift的《格列夫游記》中出現大小端后,現特指數據存儲順序的分歧。正如小說中展示的荒誕情節一般,雞蛋從大端打破和小端打破其實是無關緊要的;大端模式和小端模式的形成是歷史原因,我們需要理解。
1.1 本質
每個地址單元都對應1Byte。存在將多字節數據如何存放的問題。Little-endian:數據的高字節保存在內存高地址中,數據的低字節保存在內存的低地址中,該模式將地址高低和權值有效結合。Big-endian:與Little-endian相反;地址由小向大增加,數據按高位向低位存放。
1.2 應用
在網絡上傳輸數據,因收發端硬件平臺不同,存儲順序可能不同。TCP/IP協議規定在網絡上必須采用大端模式,在數據發送之前將轉換成大端模式。
1.3 測試方法
基于數據類型?
bool IsLittleEndian() {int test = 1;if (*((char *)&test))return true;elsereturn false; }基于聯合體
typedef union Test //大小占4個字節 {int i;char c; }Test;bool IsLittleEndian() //利用聯合體特性 {Test test;memset(&test, 0, sizeof(Test));test.i = 1;if (test.c == 1)return true;elsereturn false; }1.4 誤區
大小端主要體現在存儲方式和讀取方式上:
- 大端模式:低位在高地址、讀取從低地址到高地址。
- 小端模式:低位在低地址、讀取從高地址到低地址。
二、參考文獻
【1】深入淺出大小端模式
【2】如何測試電腦大小端
【3】測試機器大小端的方法
【4】大小端模式的有關習題
總結
以上是生活随笔為你收集整理的浅析Endian(字节序问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无聊与兴奋 《幸福之路》读书笔记
- 下一篇: 第七课 程小奔之奔跑的兔子