亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于大端法、小端法以及網(wǎng)絡(luò)字節(jié)序的深入理解

 更新時間:2013年05月27日 17:10:37   作者:  
本篇文章是對大端法、小端法以及網(wǎng)絡(luò)字節(jié)序進行了詳細的分析介紹,需要的朋友參考下
關(guān)于字節(jié)序(大端法、小端法)的定義
《UNXI網(wǎng)絡(luò)編程》定義:術(shù)語“小端”和“大端”表示多字節(jié)值的哪一端(小端或大端)存儲在該值的起始地址。小端存在起始地址,即是小端字節(jié)序;大端存在起始地址,即是大端字節(jié)序。

也可以說:
1.小端法(Little-Endian)就是低位字節(jié)排放在內(nèi)存的低地址端即該值的起始地址,高位字節(jié)排放在內(nèi)存的高地址端。
2.大端法(Big-Endian)就是高位字節(jié)排放在內(nèi)存的低地址端即該值的起始地址,低位字節(jié)排放在內(nèi)存的高地址端。
舉個簡單的例子,對于整形0x12345678。它在大端法和小端法的系統(tǒng)內(nèi)中,分別如圖1所示的方式存放。

zijiexu_pic_1 

網(wǎng)絡(luò)字節(jié)序

我們知道網(wǎng)絡(luò)上的數(shù)據(jù)流是字節(jié)流,對于一個多字節(jié)數(shù)值,在進行網(wǎng)絡(luò)傳輸?shù)臅r候,先傳遞哪個字節(jié)?也就是說,當接收端收到第一個字節(jié)的時候,它是將這個字節(jié)作為高位還是低位來處理呢?
網(wǎng)絡(luò)字節(jié)序定義:收到的第一個字節(jié)被當作高位看待,這就要求發(fā)送端發(fā)送的第一個字節(jié)應(yīng)當是高位。而在發(fā)送端發(fā)送數(shù)據(jù)時,發(fā)送的第一個字節(jié)是該數(shù)字在內(nèi)存中起始地址對應(yīng)的字節(jié)??梢姸嘧止?jié)數(shù)值在發(fā)送前,在內(nèi)存中數(shù)值應(yīng)該以大端法存放。
網(wǎng)絡(luò)字節(jié)序說是大端字節(jié)序。
比如我們經(jīng)過網(wǎng)絡(luò)發(fā)送0x12345678這個整形,在80X86平臺中,它是以小端法存放的,在發(fā)送前需要使用系統(tǒng)提供的htonl將其轉(zhuǎn)換成大端法存放,如圖2所示。

zijiexu_pic_2

字節(jié)序測試程序

不同cpu平臺上字節(jié)序通常也不一樣,下面寫個簡單的C程序,它可以測試不同平臺上的字節(jié)序。

復(fù)制代碼 代碼如下:

   #include <stdio.h>
   #include <netinet/in.h>
   int main()
   {
       int i_num = 0x12345678;
       printf("[0]:0x%x\n", *((char *)&i_num + 0));
       printf("[1]:0x%x\n", *((char *)&i_num + 1));
       printf("[2]:0x%x\n", *((char *)&i_num + 2));
       printf("[3]:0x%x\n", *((char *)&i_num + 3));

       i_num = htonl(i_num);
       printf("[0]:0x%x\n", *((char *)&i_num + 0));
       printf("[1]:0x%x\n", *((char *)&i_num + 1));
       printf("[2]:0x%x\n", *((char *)&i_num + 2));
       printf("[3]:0x%x\n", *((char *)&i_num + 3));

       return 0;
   }

在80X86CPU平臺上,執(zhí)行該程序得到如下結(jié)果:
[0]:0x78
[1]:0x56
[2]:0x34
[3]:0x12

[0]:0x12
[1]:0x34
[2]:0x56
[3]:0x78

分析結(jié)果,在80X86平臺上,系統(tǒng)將多字節(jié)中的低位存儲在變量起始地址,使用小端法。htonl將i_num轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)序,可見網(wǎng)絡(luò)字節(jié)序是大端法。

總結(jié)點:80X86使用小端法,網(wǎng)絡(luò)字節(jié)序使用大端法。

相關(guān)文章

  • 基于OpenCV讀取攝像頭實現(xiàn)單個人臉驗證MFC程序

    基于OpenCV讀取攝像頭實現(xiàn)單個人臉驗證MFC程序

    這篇文章主要為大家詳細介紹了基于OpenCV讀取攝像頭實現(xiàn)單個人臉驗證MFC程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • C語言:自定義類型詳解

    C語言:自定義類型詳解

    這篇文章主要介紹了C語言自定義函數(shù)詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-09-09
  • Qt中控件的函數(shù)使用教程分享

    Qt中控件的函數(shù)使用教程分享

    這篇文章主要為大家詳細介紹了Qt中部分控件(Text Edit編輯框、Combo Box下拉框、List Wiget和Label)函數(shù)的使用,感興趣的小伙伴可以了解一下
    2022-12-12
  • 餐館點菜系統(tǒng)C語言源代碼

    餐館點菜系統(tǒng)C語言源代碼

    這篇文章主要為大家詳細介紹了餐館點菜系統(tǒng)C語言源代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 詳解socket阻塞與非阻塞,同步與異步、I/O模型

    詳解socket阻塞與非阻塞,同步與異步、I/O模型

    這篇文章主要介紹了詳解socket阻塞與非阻塞,同步與異步、I/O模型,socket網(wǎng)絡(luò)編程中的同步,異步,阻塞式,非阻塞式,有何聯(lián)系與區(qū)別,本文將詳細講訴。
    2016-12-12
  • C++實現(xiàn)單例模式的自動釋放

    C++實現(xiàn)單例模式的自動釋放

    這篇文章主要為大家詳細介紹了C++實現(xiàn)單例模式的自動釋放,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 簡單了解C語言中主線程退出對子線程的影響

    簡單了解C語言中主線程退出對子線程的影響

    這篇文章主要介紹了簡單了解C語言中主線程退出對子線程的影響,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2019-12-12
  • C語言函數(shù)的遞歸調(diào)用詳情

    C語言函數(shù)的遞歸調(diào)用詳情

    這篇文章主要介紹了C語言函數(shù)的遞歸調(diào)用詳情,遞歸做為一種算法在程序設(shè)計語言中廣泛應(yīng)用,主要的思考方式就是大事化小,下文具體的相關(guān)介紹,需要的小伙伴可以參考一下
    2022-04-04
  • C++高性能服務(wù)器框架之線程模塊

    C++高性能服務(wù)器框架之線程模塊

    該模塊基于pthread實現(xiàn),sylar說,由于c++11中的thread也是由pthread封裝實現(xiàn)的,并且沒有提供讀寫互斥量,讀寫鎖,自旋鎖等,所以自己封裝了pthread,本文主要詳細介紹了C++高性能服務(wù)器框架中的線程模塊,需要的朋友可以參考下
    2023-06-06
  • c++支持coroutine的簡單示例

    c++支持coroutine的簡單示例

    這篇文章主要介紹了c++支持coroutine的簡單示例,使用的是linux 平臺做的,需要的朋友可以參考下
    2014-03-03

最新評論