大端序與小端序

理解大端序(Big-Endian)和小端序(Little-Endian)的關鍵在于數據在內存中存儲時字節的排列順序,特別是在存儲多字節數據類型(如整數、浮點數)時。以下是清晰易懂的解釋:


核心概念

假設有一個 32位(4字節)整數 0x12345678(十六進制表示),其最高位字節是 0x12,最低位字節是 0x78。它在內存中的存儲方式如下:

1. 大端序(Big-Endian)
  • 高位字節在前,低位字節在后(符合人類閱讀習慣)。
  • 內存地址從低到高的順序:0x120x340x560x78
    低地址 ----------------→ 高地址
    +----+----+----+----+
    | 12 | 34 | 56 | 78 |
    +----+----+----+----+
    
2. 小端序(Little-Endian)
  • 低位字節在前,高位字節在后(符合計算機處理習慣)。
  • 內存地址從低到高的順序:0x780x560x340x12
    低地址 ----------------→ 高地址
    +----+----+----+----+
    | 78 | 56 | 34 | 12 |
    +----+----+----+----+
    

💡 記憶口訣

  • 大端序:高位在地址(“大端”像領導坐前排)。
  • 小端序:低位在地址(“小端”像倒著放)。

為什么需要字節序?

計算機以字節為單位訪問內存,但數據類型(如 intfloat)可能占用多個字節。不同硬件平臺選擇不同字節序:

  • 大端序:Sun SPARC、IBM z/Architecture(大型機)、網絡傳輸(網絡字節序默認大端)。
  • 小端序:x86/x64(Intel/AMD)、ARM(可配置)、Android/iOS設備。

實際影響

1. 跨平臺數據傳輸
  • 如果一臺小端機向大端機發送 int 數據而不轉換,接收方會解析錯誤!
  • 解決方案:統一用 大端序 作為網絡傳輸標準(稱為 網絡字節序),通過函數轉換:
    htons() // 主機序轉網絡序(short類型)
    ntohl() // 網絡序轉主機序(long類型)
    
2. 代碼中的陷阱
int num = 0x12345678;
char* p = (char*)# // 用char指針訪問int的每個字節
// 小端機上:p[0] = 0x78, p[1] = 0x56, ...
// 大端機上:p[0] = 0x12, p[1] = 0x34, ...

結論:直接操作內存字節時,必須考慮字節序!


如何判斷當前系統字節序?

用C代碼檢測:

#include <stdio.h>int main() {int num = 0x1;char *p = (char*)#if (*p == 1) {printf("Little-Endian\n"); // 低位字節在低地址} else {printf("Big-Endian\n");    // 高位字節在低地址}return 0;
}

典型應用場景

  1. 網絡協議(如IP/TCP頭部)
    • 所有字段均按大端序傳輸,確保跨平臺兼容性。
  2. 文件格式(如BMP圖片、ELF可執行文件)
    • 文件頭中明確指定字節序(BMP用小端,JPEG用大端)。
  3. 硬件寄存器
    • 設備驅動的寄存器數據需按硬件要求的字節序讀寫。

總結

特性大端序 (Big-Endian)小端序 (Little-Endian)
排列順序高位字節 → 低位字節低位字節 → 高位字節
低地址內容數據最高有效字節(MSB)數據最低有效字節(LSB)
常見平臺網絡傳輸、IBM大型機x86/x64、ARM、Windows/Linux
優勢人類易讀、統一網絡標準硬件處理高效(加法從低位開始)

理解字節序能避免跨平臺數據解析錯誤,是處理底層數據、網絡編程和系統兼容性的基礎!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89143.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89143.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89143.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyTorch筆記5----------Autograd、nn庫

1.Autograd grad和grad_fn grad&#xff1a;該tensor的梯度值&#xff0c;每次在計算backward時都需要將前一時刻的梯度歸零&#xff0c;否則梯度值會一直累加grad_fn&#xff1a;葉子結點通常為None&#xff0c;只有結果節點的grad_fn才有效&#xff0c;用于只是梯度函數時哪…

Perl 格式化輸出

Perl 格式化輸出 引言 Perl 是一種通用、解釋型、動態編程語言&#xff0c;廣泛應用于文本處理、系統管理、網絡編程等領域。在Perl編程中&#xff0c;格式化輸出是一種常見的需求&#xff0c;它可以幫助開發者更好地展示和打印信息。本文將詳細講解Perl中格式化輸出的方法&…

Python爬蟲實戰:研究markdown2庫相關技術

一、引言 1.1 研究背景與意義 在當今信息爆炸的時代,互聯網上的信息量呈指數級增長。如何高效地獲取和整理這些信息成為了一個重要的研究課題。網絡爬蟲作為一種自動獲取網頁內容的技術,能夠按照一定的規則,自動地抓取萬維網信息,為信息的收集提供了有力手段。 Markdown …

【Linux】基本指令詳解(二) 輸入\輸出重定向、一切皆文件、認識管道、man、cp、mv、echo、cat

文章目錄一、man指令二、輸入/輸出重定向(echo、一切皆文件&#xff09;三、cp指令四、mv指令五、cat指令六、more/less指令七、head/tail指令八、管道初見一、man指令 Linux的指令有很多參數&#xff0c;我們不可能全記住&#xff0c;可以通過查看聯機手冊獲取幫助。 man 指令…

MVC HTML 幫助器

MVC HTML 幫助器 引言 MVC&#xff08;模型-視圖-控制器&#xff09;是一種流行的軟件架構模式&#xff0c;它將應用程序的邏輯分解為三個主要組件&#xff1a;模型&#xff08;Model&#xff09;、視圖&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09…

linux下手工安裝ollama0.9.6

1、去下載ollama的linux版的壓縮包&#xff1a; 地址&#xff1a;https://github.com/ollama/ollama/releases2、上傳到linux中。3、解壓&#xff1a; tar zxvf ollama-linux-amd64-0.9.6.tgz -C /usr/local/4、如果僅僅是要手工執行&#xff0c;已經可以了&#xff1a; ollama…

kotlin布局交互

將 wrapContentSize() 方法鏈接到 Modifier 對象&#xff0c;然后傳遞 Alignment.Center 作為實參以將組件居中。Alignment.Center 會指定組件同時在水平和垂直方向上居中。 DiceWithButtonAndImage(modifier Modifier.fillMaxSize().wrapContentSize(Alignment.Center) )創建…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | ToastNotification(推送通知)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— ToastNotification組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API&#xff08;<script s…

學習筆記(34):matplotlib繪制圖表-房價數據分析與可視化

學習筆記(34):matplotlib繪制圖表-房價數據分析與可視化分析房價分布情況&#xff0c;通過直方圖、核密度估計和正態分布擬合來直觀展示房價的分布特征&#xff0c;并進行統計檢驗。一、房價數據分析與可視化&#xff0c;代碼分析1.1、導入必要的庫import pandas as pd import …

前端三劍客之CSS

1. CSS 簡介1) CSS 簡述CSS&#xff0c;即層疊樣式表&#xff08;英文全稱&#xff1a;Cascading Style Sheets&#xff09;&#xff0c;是一種專門用于修飾 HTML 文檔呈現樣式的計算機語言。它的功能不僅限于靜態美化網頁&#xff0c;還能與各類腳本語言配合&#xff0c;實現對…

力扣25.7.11每日一題——無需開會的工作日

Description 這題類似合并區間&#xff0c;題意你們都能看懂吧…… Solution 這道題就需要用到合并區間的方法。 答案等于 daysdaysdays 減「有會議安排的天數」。 對左端點進行排序&#xff0c;計算有會議安排的天數&#xff0c;累加每個區間的長度&#xff0c;即為有會議…

每日一SQL 【銷售分析 III】

文章目錄問題案例執行順序使用分組解決問題 案例 執行順序 SQL 語句的執行順序&#xff08;核心步驟&#xff09; 同一層級的select查詢內部, 別名在整個 SELECT 計算完成前不生效 使用分組解決 select distinct s.product_id, Product.product_name from Sales sleft join …

輕輕松松帶你進行-負載均衡LVS實戰

8. LVS部署命令介紹 8.1 LVS軟件相關信息 1.程序包&#xff1a;ipvsadm 2.Unit File: ipvsadm.service 3.主程序&#xff1a;/usr/sbin/ipvsadm 4.規則保存工具&#xff1a;/usr/sbin/ipvsadm-save 5.規則重載工具&#xff1a;/usr/sbin/ipvsadm-restore 6.配置文件&#xff1a…

C#.NET 集合框架詳解

簡介 C# 集合框架是處理數據集合的核心組件&#xff0c;位于 System.Collections 和 System.Collections.Generic 命名空間。它提供了多種數據結構來高效存儲和操作數據。 集合框架概覽 System.Collections (非泛型老版) └─ System.Collections.Generic (泛…

網絡劫持對用戶隱私安全的影響:一場無形的數據竊取危機

在互聯網時代&#xff0c;網絡劫持如同一把“隱形鐮刀”&#xff0c;悄然威脅著用戶的隱私安全。當我們在瀏覽網頁、使用社交媒體或進行在線交易時&#xff0c;看似正常的網絡連接背后&#xff0c;可能正暗藏著數據被竊取的風險。網絡劫持通過多種技術手段干預用戶與服務器的正…

使用 Helm 下載 Milvus 安裝包(Chart)指南

目錄 &#x1f4e6; 使用 Helm 下載 Milvus 安裝包&#xff08;Chart&#xff09;指南 &#x1f6e0; 環境準備 &#x1f680; 第一步&#xff1a;添加 Milvus Helm 倉庫 &#x1f50d; 第二步&#xff1a;查看可用版本 &#x1f4e5; 第三步&#xff1a;下載指定版本的 C…

EXTI 外部中斷

目錄 STM32中斷 NVIC 中斷控制器 NVIC優先級分組 EXTI 外部中斷 AFIO 復用IO口 外部中斷/事件控制器&#xff08;EXTI&#xff09;框圖 STM32中斷 在STM32微控制器中&#xff0c;共有68個可屏蔽中斷通道&#xff0c;涵蓋了多個外設&#xff0c;如外部中斷&#xff08;EXT…

WebApplicationType.REACTIVE 的webSocket

通用請求體類 Data ApiModel("websocket請求消息") public class WebSocketRequest<T> implements Serializable {private static final long serialVersionUID 1L;/*** 參考&#xff1a;com.mcmcnet.gacne.basic.service.common.pojo.enumeration.screen.AiB…

降本增效!自動化UI測試平臺TestComplete并行測試亮點

在跨平臺自動化測試中&#xff0c;企業常面臨設備投入高、串行測試耗時長、測試覆蓋率難以兼顧的困境。自動化UI測試平臺TestComplete的并行測試引擎提供了有效的解決方案&#xff1a;通過云端海量設備池與CI/CD深度集成&#xff0c;實現多平臺、多瀏覽器并行測試&#xff0c;顯…

云、實時、時序數據庫混合應用:醫療數據管理的革新與展望(上)

云、實時、時序數據庫混合應用:醫療數據管理的革新與展望 1、引言 1.1 研究背景與意義 在信息技術飛速發展的當下,醫療行業正經歷著深刻的數字化轉型。這一轉型不僅是技術層面的革新,更是關乎醫療體系未來發展方向的深刻變革。從醫療服務的提供方式,到醫療管理的模式,再…