最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2013年05月27日 17:10:37   作者:  
本篇文章是對大端法、小端法以及網(wǎng)絡字節(jié)序進行了詳細的分析介紹,需要的朋友參考下
關于字節(jié)序(大端法、小端法)的定義
《UNXI網(wǎng)絡編程》定義:術語“小端”和“大端”表示多字節(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)絡字節(jié)序

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

zijiexu_pic_2

字節(jié)序測試程序

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

復制代碼 代碼如下:

   #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í)行該程序得到如下結果:
[0]:0x78
[1]:0x56
[2]:0x34
[3]:0x12

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

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

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

相關文章

  • C++設計模式編程中的觀察者模式使用示例

    C++設計模式編程中的觀察者模式使用示例

    這篇文章主要介紹了C++設計模式編程中的觀察者模式使用示例,觀察者模式在被觀察者和觀察者之間建立一個抽象的耦合,需要的朋友可以參考下
    2016-03-03
  • 深入c++中臨時對象的析構時機的詳解

    深入c++中臨時對象的析構時機的詳解

    本篇文章對c++中臨時對象的析構時機進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++基于蔡基姆拉爾森計算公式實現(xiàn)由年月日確定周幾的方法示例

    C++基于蔡基姆拉爾森計算公式實現(xiàn)由年月日確定周幾的方法示例

    這篇文章主要介紹了C++基于蔡基姆拉爾森計算公式實現(xiàn)由年月日確定周幾的方法,涉及C++針對日期時間的數(shù)值運算相關操作技巧,需要的朋友可以參考下
    2017-07-07
  • C語言貪吃蛇經(jīng)典小游戲

    C語言貪吃蛇經(jīng)典小游戲

    這篇文章主要為大家詳細介紹了C語言貪吃蛇經(jīng)典小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • do...while(0)的妙用詳細解析

    do...while(0)的妙用詳細解析

    do...while(0)消除goto語句;通常,如果在一個函數(shù)中開始要分配一些資源,然后在中途執(zhí)行過程中如果遇到錯誤則退出函數(shù),當然,退出前先釋放資源
    2013-09-09
  • C/C++ 中實現(xiàn)讓控制臺暫停的方法

    C/C++ 中實現(xiàn)讓控制臺暫停的方法

    這篇文章主要介紹了C/C++ 中實現(xiàn)讓控制臺暫停的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 使用VC6.0對C語言程序進行調(diào)試的基本手段分享

    使用VC6.0對C語言程序進行調(diào)試的基本手段分享

    這篇文章主要介紹了用VC6.0開發(fā)c語言程序的時候調(diào)試代碼的一些小技巧,需要的朋友可以參考下
    2013-07-07
  • C語言中new與malloc的區(qū)別詳解

    C語言中new與malloc的區(qū)別詳解

    這篇文章主要介紹了C語言中new與malloc的區(qū)別詳解,new是運算符,可以用于動態(tài)分配,如果想要撤銷內(nèi)存使用delete,new運算符使用的一般格式為new類型,用new分配數(shù)組空間時不能指定初值,需要的朋友可以參考下
    2023-10-10
  • C語言舉例講解轉義字符的使用

    C語言舉例講解轉義字符的使用

    轉義字符是很多程序語言、數(shù)據(jù)格式和通信協(xié)議的形式文法的一部分。對于一個給定的字母表,一個轉義字符的目的是開始一個字符序列,使得轉義字符開頭的該字符序列具有不同于該字符序列單獨出現(xiàn)(沒有轉義字符開頭)時的語義。因此轉義字符開頭的字符序列被叫做轉義序列
    2022-05-05
  • C語言也有封裝,繼承和多態(tài)你知道嗎

    C語言也有封裝,繼承和多態(tài)你知道嗎

    這篇文章主要為大家詳細介紹了C語言封裝,繼承,多態(tài),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評論

潞西市| 皮山县| 桑植县| 宁安市| 汝南县| 凤庆县| 拉萨市| 德令哈市| 简阳市| 白沙| 环江| 彭阳县| 永济市| 九江市| 韶关市| 博白县| 聊城市| 江都市| 东海县| 苏尼特左旗| 孝义市| 福泉市| 红安县| 湖州市| 融水| 湖南省| 闽侯县| 固阳县| 囊谦县| 厦门市| 黄骅市| 江永县| 治多县| 莱芜市| 泽普县| 新余市| 潞西市| 朝阳区| 榕江县| 梨树县| 广宁县|