1. 程式人生 > >網路位元組序 大端 小端

網路位元組序 大端 小端

1.小端法(Little-Endian)就是低位位元組排放在記憶體的低地址端(即該值的起始地址),

高位位元組排放在記憶體的高地址端;

2.大端法(Big-Endian)就是高位位元組排放在記憶體的低地址端(即該值的起始地址),

低位位元組排放在記憶體的高地址端;

        網路上傳輸的資料都是位元組流,對於一個多位元組數值,在進行網路傳輸的時候,先

傳遞哪個位元組?也就是說,當接收端收到第一個位元組的時候,它將這個位元組作為高位

位元組還是低位位元組處理,是一個比較有意義的問題;

        UDP/TCP/IP協議規定:把接收到的第一個位元組當作高位位元組看待,這就要求傳送

端傳送

的第一個位元組是高位位元組;而在傳送端傳送資料時,傳送的第一個位元組是該數值

在記憶體中的起始地址處對應的那個位元組,也就是說,該數值在記憶體中的起始地址處對應

的那個位元組就是要傳送的第一個高位位元組(即:高位位元組存放在低地址處);由此可見,

位元組數值在傳送之前,在記憶體中應該是以大端法存放的;所以說,網路位元組序是大端位元組序;

         比如,我們經過網路傳送整型數值0x12345678時,在80X86平臺中,它是以小端發存放

的,在傳送之前需要使用系統提供的位元組序轉換函式htonl()將其轉換成大端法存放的數值。

          示例程式:

#include <stdio.h>
#include <netinet/in.h>
int main(int argc,char** argv)
{
  int num = 0x12345678;
  unsigned char* pc = (unsigned char*)(&num);
  printf("local order:\n");
  printf("[0]: 0x%X addr:%u\n", pc[0], &pc[0]);
  printf("[1]: 0x%X addr:%u\n", pc[1], &pc[1]);
  printf("[2]: 0x%X addr:%u\n", pc[2], &pc[2]);
  printf("[3]: 0x%X addr:%u\n", pc[3], &pc[3]);
  num = htonl(num);
  printf("htonl order:\n");
  printf("[0]: 0x%X addr:%u\n", pc[0], &pc[0]);
  printf("[1]: 0x%X addr:%u\n", pc[1], &pc[1]);
  printf("[2]: 0x%X addr:%u\n", pc[2], &pc[2]);
  printf("[3]: 0x%X addr:%u\n", pc[3], &pc[3]);
  return 0;
}

X86平臺上的輸出:
local order:
[0]: 0x78 addr:4289157020 //低位位元組存放在低地址處,則是小端法;
[1]: 0x56 addr:4289157021
[2]: 0x34 addr:4289157022
[3]: 0x12 addr:4289157023 //高位位元組存放在高地址處;
htonl order:
[0]: 0x12 addr:4289157020 //由此看出,主機位元組序與網路位元組不一樣;
[1]: 0x34 addr:4289157021
[2]: 0x56 addr:4289157022
[3]: 0x78 addr:4289157023


相關推薦

網路位元組 大端

1.小端法(Little-Endian)就是低位位元組排放在記憶體的低地址端(即該值的起始地址), 高位位元組排放在記憶體的高地址端; 2.大端法(Big-Endian)就是高位位元組排放在記憶體的低地址端(即該值的起始地址), 低位位元組排放在記憶體的高地址端;    

大端位元組還是位元組-新浪2019筆試題

愚蠢的博主選錯了新浪崗位,考的是Androd和IOS方向的題,好在程式設計題還算正常,好陣子沒空寫,現在簡單記錄一下 先了解一下什麼是大端位元組和小端位元組 大端儲存就是將高位元組序的內容儲存到低地

大端位元組位元組問題(big-endian & little-endian)

        所謂的大端模式(Big-endian),是指資料的低位(就是權值較小的後面那幾位)儲存在記憶體的高地址中,而資料的高位,儲存在記憶體的低地址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:地址由小向大增加,而資料從高位往低位放;         所謂的小端模式(Little-endian

大端位元組位元組

對錶示一個物件的位元組序列排序,有兩個通用的規則。有些機器選擇在儲存器中按照從最低有效位元組到最高有效位元組的順序儲存物件,而另一些機器按照從最高有效位元組到最低有效位元組的順序儲存。前一種規則——

如何區別大端位元組位元組

網路位元組序,高位高地址,低位低地址,屬於大端形式 主機位元組序,高位低地址,低位高地址,屬於小端形式 注:在沒有規定位元組序的情況下,powerpc架構預設為大端位元組序,arm架構預設為小端位元組序。 例:int *p=0x12345678H int a=0x11223344 p=&am

關於大端位元組位元組

現在,大多數的計算機都是按位元組編址的(除了按位元組編址還有按字編址和按位編址)。所以這裡只討論按位元組編址的計算機。 大端位元組序:資料的高位元組儲存在低地址。 小端位元組序:資料的高位元組儲存在高地址。 計算機中的記憶體可以看成是線性的(這裡只討論按位元組編址),

大端位元組位元組通俗易懂講解

大端(儲存模式),是指資料的地位儲存在記憶體的高地址中,而資料的高位儲存在記憶體的低地址中。 小端(儲存模式),是指資料的地位儲存在記憶體的低地址中,而資料的高位儲存在記憶體的高地址中。 小端如下圖

判斷CPU是大端位元組還是位元組

#include <stdio.h> union hhh { int num; char a; }; int main() { union hhh h; h.num = 0x12345678; if(h.a == 0x78

大端 網路位元組說明

大端(Big-Endian)和小端(little-Endian)的起源 關於大端小端名詞的由來,有一個有趣的故事,來自於Jonathan Swift的《格利佛遊記》:Lilliput和Blefuscu這兩個強國在過去的36個月中一直在苦戰。 戰爭的原因:大家都知道,吃雞蛋的時候,原始的方法是打破

網路通訊之 位元組轉換原理與網路位元組大端模式

     原因如下:網路協議規定接收到得第一個位元組是高位元組,存放到低地址,所以傳送時會首先去低地址取資料的高位元組。小端模式的多位元組資料在存放時,低地址存放的是低位元組,而被髮送方網路協議函式傳送時會首先去低地址取資料(想要取高位元組,真正取得是低位元組),接收方網路協議函式接收時會將接收到的第一個位元

大端 && 網路位元組

(0)背景: 網路上的資料流是位元組流,對於一個多位元組數值,在進行網路傳輸的時候,先傳遞哪個位元組?也就是說,當接收端收到第一個位元組的時候,它是將這個位元組作為高位還是低位來處理呢?  (1)網路位元組序定義: 收到的第一個位元組被當作高位看待,這就要求傳送端傳送的第

大端法、法、網路位元組

關於位元組序(大端法、小端法)的定義 《UNXI網路程式設計》定義:術語“小端”和“大端”表示多位元組值的哪一端(小端或大端)儲存在該值的起始地址。小端存在起始地址,即是小端位元組序;大端存在起始地址,即是大端位元組序。 也可以說:  1.小端法(Little-End

大端儲存和儲存,網路位元組

一、大端、小端 "大端"和"小端"表示多位元組值的哪一端儲存在該值的起始地址處;小端儲存在起始地址處,即是小端位元組序;大端儲存在起始地址處,即是大端位元組序; 或者說: 1.小端法(Little-Endian)就是低位位元組排放在記憶體的低地址端(即該值的起始地址),高

網路位元組大端機,

一、在進行網路通訊時是否需要進行位元組序轉換? 相同位元組序的平臺在進行網路通訊時可以不進行位元組序轉換,但是跨平臺進行網路資料通訊時必須進行位元組序轉換。 原因如下:網路協議

關於位元組大端網路位元組

1. 首先最要明確一點:位元組序是長度跨越多個位元組的資料被儲存的順序。 2. 其次要明確一點:資料的位元組高低是高在左,低在右,就跟數學裡邊一樣。 3. 再次要明確一點:計算機的地址高低是低在左,高在右(肉眼看時)。 4. 大端:高低高低,即資料的高位元組存在低地址,低位

位元組----大端

大端序 (big endian ):最高有效位元組儲存在最低低至,隨地址升高,位元組的權重降低。 小端序(little endian): 最低有效位元組儲存在最低地址,隨地址升高,位元組的權重升高。 比如說一個int型數字a為0x1234,那麼0x12代表a的高位,0x34代表a

位元組——大端(Big Endian)和(Little Endian)

每次碰到這個問題都需要現查資料,腦子不夠用啊,索性就把它的來龍去脈寫下來,加深一下印象。 1. 位元組序問題的存在原因 自計算機採用byte作為儲存單位起,位元組序就是一個有爭議的話題。這是因為我們通常處理的資料都是多位元組資料,比如c語言中一個型別為int的變數,在記憶體

位元組整數字節/大端

《UNIX Network Programming Volume1: The Socket Networking API, Third Edition》 W.Richard Stevens

大端 和網絡字節說明

body 地址 eve powerpc tcp ron 轉換成 字節流 n) 不同CPU存放數據有大端(Big-Endian)和小端(little-Endian)之分 小端字節序和大端字節序表示存儲的字節順序有區別 小端字節序:低字節存於內存低地址;高字節存於內存高地址;

通過一句話記住大端的區別

在軟體開發過程中,軟體開發人員都知道大端序和小端序的概念,但是在真正使用的時候,傻傻分不清兩種到底是怎麼儲存。 首先還是先看下基本概念: 1、大端模式:高位元組儲存在記憶體的低地址 2、小端模式:高位元組儲存在記憶體的高地址 舉例: var = 0x11223344,對於這個變數