什么是大端?什么是小端?如何驗證?

什么是大端?什么是小端?如何驗證?

在計算機系統中,大端(Big-Endian)小端(Little-Endian) 是兩種不同的字節序(Byte Order),用于描述多字節數據在內存中的存儲方式。

1. 大端(Big-Endian)

  • 定義:高位字節存于低地址,低位字節存于高地址。

  • 類比:類似人類讀寫數字的習慣(從左到右,先高位后低位)。

  • 示例

    :對于 32 位整數0x12345678(十六進制),大端存儲方式如下:

    內存地址(由低到高)存儲內容(1 字節)
    0x00000x12(高位)
    0x00010x34
    0x00020x56
    0x00030x78(低位)

2. 小端(Little-Endian)

  • 定義:低位字節存于低地址,高位字節存于高地址。

  • 類比:與人類習慣相反,先存儲低位字節。

  • 示例

    :同樣對于0x12345678,小端存儲方式如下:

    內存地址(由低到高)存儲內容(1 字節)
    0x00000x78(低位)
    0x00010x56
    0x00020x34
    0x00030x12(高位)

3. 驗證方法

通過代碼可以驗證當前系統的字節序,核心思路是:

  • 定義一個多字節變量(如 int)。
  • 用字符指針(char*)逐個訪問其字節,觀察存儲順序。
示例代碼(C 語言):
#include <stdio.h>int main() {int num = 0x12345678;  // 定義一個32位整數char *p = (char*)&num; // 用字符指針訪問其字節// 打印每個字節的十六進制值printf("字節順序(低地址到高地址):\n");printf("0x%x\n", p[0]);  // 低地址printf("0x%x\n", p[1]);printf("0x%x\n", p[2]);printf("0x%x\n", p[3]);  // 高地址// 判斷字節序if (p[0] == 0x78 && p[3] == 0x12) {printf("當前系統為小端(Little-Endian)\n");} else if (p[0] == 0x12 && p[3] == 0x78) {printf("當前系統為大端(Big-Endian)\n");} else {printf("未知字節序\n");}return 0;
}
示例代碼(Python):
import sys# 方法1:使用sys.byteorder
print("sys.byteorder結果:", sys.byteorder)  # 小端返回"little",大端返回"big"# 方法2:手動驗證
num = 0x12345678
# 將整數轉換為4字節的字節串(默認大端,需指定小端參數驗證)
bytes_big = num.to_bytes(4, byteorder='big')
bytes_little = num.to_bytes(4, byteorder='little')# 獲取系統存儲的實際字節
import ctypes
p = ctypes.cast(ctypes.pointer(ctypes.c_int(num)), ctypes.POINTER(ctypes.c_char * 4)).contents
actual_bytes = bytes(p)if actual_bytes == bytes_big:print("當前系統為大端(Big-Endian)")
elif actual_bytes == bytes_little:print("當前系統為小端(Little-Endian)")

4. 常見應用場景

  • 硬件:x86、ARM(默認)等架構使用小端;PowerPC、SPARC 等使用大端。
  • 網絡協議:TCP/IP 協議規定使用大端(稱為 “網絡字節序”),因此跨平臺通信時需轉換。
  • 文件格式:部分格式(如 BMP 圖像)使用小端,部分(如 JPEG、PNG)使用大端。

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

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

相關文章

JavaScript 語句和函數

1. JavaScript 語句 1&#xff09;if語句 if (condition) statement1 else statement2這里的條件&#xff08;condition&#xff09;可以是任何表達式&#xff0c;并且求值結果不一定是布爾值。 ECMAScript會自動調用Boolean()函數將這個表達式的值轉換為布爾值。 如果條件…

代碼隨想錄刷題Day22

替換數字 這道題比較簡單&#xff0c;遇到字母就copy到新的字符數組&#xff0c;如果是遇到數字&#xff0c;就在新字符數組中加入number的字符串。代碼如下&#xff1a; #include<stdio.h> #include<ctype.h> #include<string.h> #define Max 1000000 int…

邏輯回歸參數調優實戰指南

邏輯回歸的參數調節參數展示 LogisticRegression(penaltyl2,dualFalse,tol1e4,C1.0,fit_interceptTrue,intercept_scaling1,class_weightNone,random_stateNone,solverliblinear,max_iter100,multi_classovr,verbose0,warm_startFalse, n_jobs1)在前面的學習中&#xff0c;我們…

cocosCreator2.4 googlePlay登錄升級、API 35、16KB內存頁面的支持

環境&#xff1a;我這里是cocosCreator 2.4.12 導出的android 工程 登錄升級 后臺收到的google 的提醒&#xff1a; 之前是通過implementation com.google.android.gms:play-services-auth:20.0.0 來獲取玩家 uid 和 郵箱&#xff0c;然后發送到我們的服務器獲取賬號。 升級…

unity avpro實現互動影游關鍵問題

創建視頻播放器?在Hierarchy面板中右鍵創建&#xff1a;Video > AVPro Video - MediaPlayer創建后會生成一個MediaPlayer對象&#xff0c;用于控制視頻播放添加視頻資源將視頻文件放入項目的StreamingAssets文件夾下在MediaPlayer組件的設置中選擇要播放的視頻文件在UI上顯…

【C找第一個只出現一次的字符】2022-8-18

緣由樣例通過&#xff0c;請問為什么錯了呢&#xff1f;(語言-c語言)-編程語言-CSDN問答 char str[100000];fgets(str, 100000, stdin);int a[26]{}, i, count 0;int len strlen(str);for (i 0; i<len; i) a[str[i] - a];for (i 0; i<len; i){if (a[str[i] - a] 1){…

MCP AI應用通信的底層機制

技術小館專注AI與Java領域的前沿技術知識庫 技術小館官網 在AI應用快速發展的今天&#xff0c;不同AI系統之間的高效通信成為技術架構的關鍵挑戰。MCP&#xff08;Model Context Protocol&#xff09;作為新一代AI應用通信協議&#xff0c;正在重新定義AI工具生態的構建方式。…

UI測試平臺TestComplete如何實現從Git到Jenkins的持續測試

還在為手動做UI測試又慢又累發愁&#xff1f;更頭痛的是&#xff0c;代碼改完還得等半天才能測&#xff0c;測完了結果又散得到處都是&#xff0c;根本看不清質量全貌?TestComplete幫你搞定&#xff1a;直接連上你的Git倉庫&#xff0c;代碼一有動靜就能感知。接著&#xff0c…

【Debian】4-?2 Gitea搭建

【Debian】4-?2 Gitea搭建一、準備工作二、創建 Gitea 用戶&#xff08;推薦&#xff09;三、下載并安裝 Gitea四、配置Gitea4-1 創建目錄結構4-2 創建配置目錄五、配置 Systemd 服務六、訪問 Gitea Web 界面七、小插曲一、準備工作 更新系統軟件為最新 sudo apt update &am…

【CDH × Docker】一次測試部署,N 次復用的環境鏡像方案

&#x1f680; 一次測試環境的探索&#xff1a;我如何將 CDH 集群打包成 Docker 鏡像&#xff0c;留給未來的自己 &#x1f9e9; 背景故事 最近在項目中&#xff0c;我們計劃上線一個基于 CDH&#xff08;Cloudera Distribution Hadoop&#xff09; 的大數據平臺。正式上生產環…

Java 日期時間格式化模式說明

Java 中日期時間格式化使用特定的模式字符串來定義輸出格式。以下是常見的格式化符號及其含義&#xff0c;適用于 SimpleDateFormat 和 DateTimeFormatter一、日期部分格式化符號符號含義示例y年 (Year)yyyy → 2023M月 (Month)MM → 09, MMM → Sep, MMMM → Septemberd月中的…

代碼隨想錄算法訓練營三十三天|動態規劃part06

LeetCode 322 零錢兌換 題目鏈接&#xff1a;322. 零錢兌換 - 力扣&#xff08;LeetCode&#xff09; 給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及一個整數 amount &#xff0c;表示總金額。 計算并返回可以湊成總金額所需的 最少的硬幣個數 。…

【大模型LLM】大模型訓練加速 - 梯度累積(Gradient Accumulation)原理詳解

梯度累積&#xff08;Gradient Accumulation&#xff09;原理詳解 梯度累積是一種在深度學習訓練中常用的技術&#xff0c;特別適用于顯存有限但希望使用較大批量大小&#xff08;batch size&#xff09;的情況。通過梯度累積&#xff0c;可以在不增加單個批次大小的情況下模擬…

【數據分享】各省文旅融合耦合協調度及原始數據(2012-2022)

數據介紹引言 文旅融合是推動區域經濟高質量發展、促進共同富裕的重要路徑。黨的二十大報告明確提出“推進文化和旅游深度融合發展”的戰略目標&#xff0c;文旅產業通過資源整合與業態創新&#xff0c;可顯著縮小城鄉、區域差距&#xff0c;提升物質與精神雙重福祉&#xff08…

Linux編程: 10、線程池與初識網絡編程

今天我計劃通過一個小型項目&#xff0c;系統講解線程池與網絡編程的核心原理及實踐。項目將圍繞 “利用線程池實現高并發網絡通信” 這一核心需求展開&#xff0c;具體設計如下&#xff1a; 為保證線程安全&#xff0c;線程池采用單例模式設計&#xff0c;確保全局唯一實例避…

藏云閣 Logo 庫(開源項目SVG/PNG高清Logo)

在日常技術方案設計、架構圖繪制或PPT制作中&#xff0c;常常會遇到一些問題&#xff0c;比如&#xff1a; 找不到統一風格的開源項目組件圖標&#xff0c;PPT中的logo五花八門下載的圖標分辨率不足&#xff0c;放大后模糊失真不同來源的圖標顏色風格沖突&#xff0c;破壞整體…

從0開始學習R語言--Day64--決策樹回歸

對于沒有特征或者說需要尋找另類關系的數據集&#xff0c;我們通常會用聚合或KNN近鄰的方法來分類&#xff0c;但這樣的分類或許在結果上是好的&#xff0c;但是解釋性并不好&#xff0c;有時候我們甚至能看到好的結果反直覺&#xff1b;而決策樹回歸做出的結果&#xff0c;由于…

B+樹高效實現與優化技巧

B樹的定義 一顆M階B樹T,滿足以下條件 每個結點至多擁有M課子樹 根結點至少擁有兩顆子樹 除了根結點以外,其余每個分支結點至少擁有M/2課子樹 所有的葉結點都在同一層上 有k棵子樹的分支結點則存在k-1個關鍵字,關鍵字按照遞增順序進行排序 關鍵字數量滿足 ceil( M/2 ) - 1 &…

Android 基礎入門學習目錄(持續更新)

四大組件 Activity&#xff1a; Service&#xff1a; BroadcastReceiver&#xff1a; ContentProvider&#xff1a; UI 與交互開發 常見的UI布局和UI控件 樣式與主題 Fragment Intent 數據存儲 自定義View和自定義Group 自定義View 自定義ViewGroup 事件分發 Key…

Linux移動大量文件命令

背景 使用 mv 命令報“/bin/mv: 參數列表過長”&#xff0c;也是第一遇到&#xff0c;查了一下&#xff0c;最后用rsync命令解決了。還好每臺服務器&#xff0c;都必裝rsync了&#xff0c;記錄如下。 命令 nohup rsync -av --remove-source-files --progress /public/tmp/video…