【網絡安全】——大端序(Big-Endian)??和??小端序(Little-Endian)

字節序(Endianness)是計算機系統中多字節數據(如整數、浮點數)在內存中存儲或傳輸時,??字節排列順序??的規則。它分為兩種類型:??大端序(Big-Endian)??和??小端序(Little-Endian)??。這一概念源于不同硬件體系結構的設計差異,直接影響數據在不同系統間的兼容性。


??一、核心概念與示例??

1. ??大端序(Big-Endian)??
  • ??定義??:高位字節(Most Significant Byte, MSB)存儲在低地址,低位字節(Least Significant Byte, LSB)存儲在高地址。
  • ??示例??:
    以16位整數?0x1234?為例(十六進制):
    • 高位字節:0x12
    • 低位字節:0x34
    • ??內存地址??:
      地址 0x1000: 0x12  
      地址 0x1001: 0x34  
    • ??類比??:類似人類書寫數字的順序(從左到右,高位在前)。
2. ??小端序(Little-Endian)??
  • ??定義??:低位字節(LSB)存儲在低地址,高位字節(MSB)存儲在高地址。
  • ??示例??:
    同一數值?0x1234
    • 高位字節:0x12
    • 低位字節:0x34
    • ??內存地址??:
      地址 0x1000: 0x34  
      地址 0x1001: 0x12  
    • ??類比??:類似倒序書寫數字(從右到左,低位在前)。

??二、為什么需要關注字節序???

1. ??跨系統兼容性問題??
  • ??場景??:不同硬件架構(如x86 vs ARM)或網絡傳輸(如TCP/IP)時,若未統一字節序,會導致數據解析錯誤。
    • ??經典案例??:
      • x86 CPU(小端序)向PowerPC(大端序)發送數據?0x1234,接收方會錯誤解析為?0x3412
2. ??常見應用場景??
??場景????典型字節序????原因??
網絡傳輸(TCP/IP)大端序(網絡字節序)統一標準(RFC 1700規定)
x86/x64 CPU小端序Intel/AMD處理器設計傳統
文件格式(如JPEG)大端序跨平臺兼容性要求
ARM架構可配置(默認小端序)靈活性(支持兩種模式)

??三、字節序的檢測與轉換??

1. ??檢測當前系統的字節序?
#include <stdio.h>int main() {unsigned int num = 0x12345678;unsigned char *p = (unsigned char *)&num;if (*p == 0x78) {printf("Little-Endian\n");  // 低位在前:0x78 0x56 0x34 0x12} else {printf("Big-Endian\n");     // 高位在前:0x12 0x34 0x56 0x78}return 0;
}
2. ??字節序轉換函數??
  • ??網絡編程常用函數??:

#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);  // 主機序→網絡序(32位)
uint16_t htons(uint16_t hostshort); // 主機序→網絡序(16位)
uint32_t ntohl(uint32_t netlong);   // 網絡序→主機序(32位)
uint16_t ntohs(uint16_t netshort);  // 網絡序→主機序(16位)
  • ??手動轉換方法??(以32位整數為例):
uint32_t swap_endian(uint32_t num) {return ((num >> 24) & 0xFF)      |  // 原最高字節→最低位((num >> 8)  & 0xFF00)    |((num << 8)  & 0xFF0000)  |((num << 24) & 0xFF000000);
}

四、實際案例分析??

1. ??網絡協議解析??
  • ??問題??:接收到的網絡數據包需按大端序解析,但本地系統為小端序。
  • ??解決方案??:
uint32_t network_value = 0x12345678;
uint32_t host_value = ntohl(network_value);  // 轉換為本地字節序
2. ??文件格式處理??
  • ??PNG文件頭??:固定以大端序存儲,簽名字節為?0x89 0x50 0x4E 0x47
  • ??錯誤處理??:若按小端序讀取,會誤判為?0x47 0x4E 0x50 0x89,導致文件解析失敗。
3. ??嵌入式系統開發??
  • ??傳感器數據??:某些I2C/SPI設備返回的數據可能使用與主控CPU不同的字節序。
  • ??解決方法??:
uint16_t sensor_data = read_from_sensor();  // 假設為大端序
uint16_t converted_data = (sensor_data << 8) | (sensor_data >> 8);  // 手動轉小端序

??五、總結??

  • ??核心區別??:大端序是“高位在前”,小端序是“低位在前”。
  • ??關鍵原則??:
    • ??跨系統通信時需統一字節序??(網絡傳輸默認用大端序)。
    • ??處理外部數據(文件、網絡包)時,必須顯式轉換字節序??。
  • ??記憶技巧??:
    • 大端序:類似人類書寫(如數字?1234?存儲為?12 34)。
    • 小端序:倒序存儲(如數字?1234?存儲為?34 12)。

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

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

相關文章

六個倉庫合并為一個倉庫,保留master和develop分支的bat腳本

利用git subtree可以實現多個倉庫合并為一個倉庫&#xff0c;手動操作起來太麻煩了&#xff0c;今天花了點時間寫了一個可執行的腳本&#xff0c;現在操作起來就方便多了。 1、本地新建setup.bat文件 2、用編輯器打開&#xff08;我用的是Notepad&#xff09; 3、把下面代碼…

使用定時器監視當前PID 如果當前程序關閉 UI_Core.exe 也隨之自動關閉實現方法

使用定時器監視當前PID 如果當前程序關閉 UI_Core.exe 也隨之自動關閉實現方法 描述: C20 QT6.9 VS2022 中使用QProcess::startDetached(“UI_Core.exe”, QStringList(), QString(), &UI_Manage_pid);是啟動目標程序 能否同時告訴目標程序當前宿主程序的PID,在UI_CORE.EX…

神經網絡是如何工作的

人工智能最核心的技術之一&#xff0c;就是神經網絡&#xff08;Neural Networks&#xff09;。但很多初學者會覺得它是個黑盒&#xff1a;為什么神經網絡能識別圖片、翻譯語言&#xff0c;甚至生成文章&#xff1f; 本文用圖解最小代碼實現的方式&#xff0c;帶你深入理解&am…

LeetCode熱題100 兩數之和

目錄 兩數之和題目解析方法一暴力求解代碼 方法二哈希代碼 感謝各位大佬對我的支持,如果我的文章對你有用,歡迎點擊以下鏈接 &#x1f412;&#x1f412;&#x1f412; 個人主頁 &#x1f978;&#x1f978;&#x1f978; C語言 &#x1f43f;?&#x1f43f;?&#x1f43f;…

在線服務器具體是指什么?

在線服務器主要是指一種能夠隨時進行網絡連接、管理和操作的服務器&#xff0c;在線服務器是通過互聯網或者是本地網絡&#xff0c;來為企業和用戶提供數據存儲和網絡服務的&#xff0c;在線服務器也可以是物理服務器或者是虛擬服務器&#xff0c;能夠根據遠程訪問工具進行管理…

OSPF綜合性實驗

實驗拓撲&#xff1a; 第一步&#xff1a;進行子網劃分 172.16.0.0/17 172.16.0000 00 00.00000000 -- area1 172.16.0.1/22 -- AR1--G0/0/0 172.16.0.2/22 -- AR2--G0/0/0 172.16.0.3/22 -- AR3--G0/0/0 172.16.4.1/22 -- AR1-- Lo0 172.16.8.2/22 -- AR2-- Lo0 172.16.12.3/…

WEB前端表單及表格標簽綜合案例

表單標簽綜合案例&#xff1a; 源代碼&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

實戰項目3(04)

??????目錄 ??????任務場景一 【r1配置】 【sw1配置】 任務場景二 【r1配置】 【sw1配置】 【sw2配置】 任務場景一 某公司網絡為了減少廣播包對網絡的影響&#xff0c;網絡管理員對網絡進行了VLAN劃分&#xff0c;完成VLAN劃分后&#xff0c;為了不影響VL…

tinyint(3)數據類型講解

TINYINT(3) 是數據庫中用于定義字段數據類型的一種寫法&#xff0c;常見于 MySQL 等數據庫系統。下面來詳細了解其含義和作用&#xff1a; 數據類型本質 TINYINT 屬于整數類型&#xff0c;在不同的數據庫系統中&#xff0c;它所占用的存儲空間和表示范圍通常是固定的。以 MyS…

[原創](現代Delphi 12指南):[macOS 64bit App開發]: 如何獲取自身程序的所在的目錄?

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、…

自定義prometheus exporter實現監控阿里云RDS

# 自定義 Prometheus Exporter 實現多 RDS 數據采集## 背景1. Prometheus 官網提供的 MySQL Exporter 對于 MySQL 實例只能一個進程監控一個實例&#xff0c;數據庫實例很多的情況下&#xff0c;不方便管理。 2. 內部有定制化監控需求&#xff0c;RDS 默認無法實現&#xff0c;…

開放原子大賽石油軟件賽道參賽經驗分享

億級以上網格油藏模型三維可視化 一、賽項背景 油藏數值模擬是油氣田開發中至關重要的一環。油藏數值模擬將儲層與井的數學模型離散求解&#xff0c;預測地下流體、能量等的動態變化&#xff0c;廣泛應用于油田產量評估、開發方案優化等。隨著計算機技術特別是并行技術的發展…

學習方法討論——正論科舉精神的內核

世界不存在絕對的善&#xff0c;可以很善&#xff0c;但很難找到絕對的善&#xff0c;總帶些副作用&#xff1b;世界上也不存在絕對的惡&#xff0c;可以很惡&#xff0c;但很難找到絕對的惡&#xff0c;可以嘗試舉例&#xff1b; 再者&#xff0c;物極必反&#xff0c;當對一個…

網絡不再神秘:如何有效利用服務器網絡流量探針進行監控?

目錄 一、流量探針到底是個啥&#xff1f; 二、別只是“部署了”&#xff0c;關鍵在“用得好” 1. 做到“最小粒度”數據采集 2. 結合時間窗口&#xff0c;構建行為基線 3. 利用標簽化管理&#xff0c;提升可讀性 4. 把探針輸出對接安全告警系統 三、那如何部署才合理&a…

uniapp(微信小程序)>關于父子組件的樣式傳遞問題(自定義組件樣式穿透)

在父組件中給子組件添加類名,子組件的樣式由父組件決定 由于"微信小程序"存在【樣式隔離機制】&#xff0c;且默認設置為isolated(啟用樣式隔離)&#xff0c;因此這里給出以下兩種解決方案&#xff1a; // 小程序編譯機制 1. 當 <style scoped> 存在時&#…

基于FastAPI框架的日志模塊設計

以下是一個基于FastAPI框架設計的日志模塊&#xff0c;結合SQLite數據庫實現增刪改查功能的完整實現方案&#xff1a; 1. 項目結構 your_project/ ├── app/ │ ├── logs/ # 日志模塊目錄 │ │ ├── models.py # 數據庫模型定義 │ │ …

面試題:C++虛函數可以是內聯函數嗎?

目錄 1.引言 2.示例 3.總結 1.引言 為什么C的虛函數和內聯函數這兩個看似矛盾的特性能否共存&#xff1f;這個問題實際上觸及了C編譯期優化與運行時多態性之間的微妙平衡。我發現這個問題不僅是面試中的常見陷阱&#xff0c;更是理解C深層機制很好的一個點。 虛函數可以被聲…

用python清除PDF文件中的水印(Adobe Acrobat 無法刪除)

學校老師發的資料&#xff0c;有時候會帶水印&#xff0c;有點強迫癥的都想給它去掉。用Adobe Acrobat試了下&#xff0c;檢測不到水印&#xff0c;無法刪除&#xff01;分析發現原來這類PDF文件是用word編輯的&#xff0c;其中的水印是加在了頁眉中&#xff01; 自己動手想辦法…

Oracle中自定義異常內置異常嵌套異常的捕獲處理

一、異常類型分類 類型說明示例內置預定義異常Oracle已命名異常&#xff08;如NO_DATA_FOUND&#xff09;查詢無數據時觸發內置非預定義異常未命名的Oracle錯誤&#xff08;需用PRAGMA EXCEPTION_INIT關聯&#xff09;ORA-02290&#xff08;違反檢查約束&#xff09;自定義異常…

《Flutter社交應用暗黑奧秘:模式適配與色彩的藝術》

暗黑模式已從一種新奇的功能演變為用戶體驗中不可或缺的一環。對于Flutter開發者而言&#xff0c;如何在社交應用中完美實現暗黑模式適配與色彩對比度優化&#xff0c;是一場充滿挑戰與驚喜的技術探索之旅。 暗黑模式&#xff0c;絕非僅僅是將界面顏色反轉這么簡單。從用戶體驗…