精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我們一起聊聊如何理解字節(jié)序

開發(fā) 前端
字節(jié)序是計算機存儲多字節(jié)數(shù)據的方式,目前的方式有:大端字節(jié)序和小端字節(jié)序,字節(jié)序主要是針對多字節(jié)的數(shù)據類型,比如 short、int 等。

 [[439739]]

計算機只能理解 0 和 1 組成的二進制數(shù)據, 一個 bit 的值是 0 或 1,八個這樣的 bit 組成了一個字節(jié),通過字節(jié),計算機可以表示一些復雜的數(shù)據,比如:音頻、視頻等,有些數(shù)據用一個字節(jié)就能表示,比如英文字符,而有些數(shù)據需要多個字節(jié)來表示,比如:漢字, 對于多字節(jié)的數(shù)據,存儲的時候會有字節(jié)順序的問題,也就是字節(jié)序

字節(jié)序是什么

字節(jié)序是計算機存儲多字節(jié)數(shù)據的方式,目前的方式有:大端字節(jié)序和小端字節(jié)序,字節(jié)序主要是針對多字節(jié)的數(shù)據類型,比如 short、int 等

  • 大端字節(jié)序

高位字節(jié)存儲在內存的低地址上,低位字節(jié)存儲在內存的高位地址上

  • 小端字節(jié)序

高位字節(jié)存儲在內存的高地址上,低位字節(jié)存儲在內存的低地址上

如何理解字節(jié)序

我們平常書寫和閱讀數(shù)字的習慣是從左到右的,所以把最左邊的字節(jié)當作最高位字節(jié),最右邊的字節(jié)當作做最低位字節(jié),從左到右,表示從高位字節(jié)到低位字節(jié)

例如:對于 0x01020304,它的大端和小端字節(jié)序在內存中的布局如下圖所示

0x 01 02 03 04 總共四個字節(jié)大小,以人們習慣的閱讀順序,0x01 處于左邊,屬于高位字節(jié),0x04 處于右邊,屬于低位字節(jié)

內存地址從 0x 00 00 00 07 到 0x 00 00 00 0A 4個字節(jié)的空間,剛好能存儲得下

根據大端字節(jié)序的的規(guī)則:高位字節(jié)存儲在內存低地址,所以處于高位字節(jié)的 0x01 存儲在 0x 00 00 00 07 地址處,緊接著 次高位字節(jié) 0x02 存儲在次低地址 0x 00 00 00 08 處,剩下的兩個字節(jié) 0x03 和 0x04 分別存儲于 0x 00 00 00 09 和 0x 00 00 00 0A 地址處,最后的結果是 0x 01 02 03 04

小端字節(jié)序和大端剛好相反,它指的是 高位字節(jié)存儲在內存高地址處,所以處于高位字節(jié)的 0x01 存儲在 0x 00 00 00 0A 地址處,次高位字節(jié) 0x02 存儲在次高地址 0x 00 00 00 09 處,余下的 0x03 和 0x04 分別存儲于 0x 00 00 00 08 和 0x 00 00 00 07 地址處,最后的結果是 0x 04 03 02 01

從上圖可以看出,對于相同的數(shù)據,大端和小端的內存布局是不一樣的,大端字節(jié)序的存儲形式更符合人們平常書寫和閱讀的習慣

為什么會有字節(jié)序

可能有人會感到疑惑:既然大端字節(jié)序更符合人們閱讀的習慣,為什么不全部都采用大端的方式,這樣也就不會有字節(jié)序的問題了 ?

確實,如果所有平臺都用同一種存儲順序,就沒有字節(jié)序這一說法了

在早期, CPU 只有幾千個邏輯門,小端的方式能更有效的使用邏輯電路,所以很多計算機內部計算都采用小端的方式,這種方式也就保留到了現(xiàn)在

另外,字節(jié)序是跟 CPU 架構相關,不同的廠家設計的規(guī)范可能都不一樣,比如 Intel 的 x86 是小端方式,而 IBM 的 PowerPC 則采用大端方

大端的方式更符合人們的閱讀習慣,因此大部分網絡傳輸以及文件存儲都是大端的方式

總的來說,小端主要是在計算機內部使用,大端則在外部使用

計算機如何處理字節(jié)序

計算機讀取數(shù)據的時候是不區(qū)分字節(jié)序的,它總是從內存低地址到高地址的順序,按字節(jié)讀取

下面的示例圖展示了數(shù)據 0x0102 的 大端和小端的內存布局以及CPU讀取內存的順序

由上圖可知,對于大端字節(jié)序來說,內存低地址處存儲的是高位字節(jié),也即計算機讀取內存的第一個字節(jié)就是高位字節(jié),小端字節(jié)序就正好相反,內存低地址處存儲的是低位字節(jié),讀取內存的第一個字節(jié)是低位字節(jié)

計算機只有在讀取數(shù)據的時候才需要區(qū)分字節(jié)序

就拿上面展示大端方式的圖 ( 第一張 ) 來說,內存 0x 00 00 00 07 地址處存儲的數(shù)據是 0x01 , 0x 00 00 00 08 地址處存儲的數(shù)據是 0x02

如果是以大端的方式讀取的話,地址 0x 00 00 00 07 處的數(shù)據 0x01 會放到高位字節(jié), 0x 00 00 00 08 處的數(shù)據是 0x02 放到低位字節(jié),最終這兩個字節(jié)的數(shù)據是 0x 01 02

如果是以小端的方式讀取的話,,地址 0x 00 00 00 07 處的數(shù)據 0x01 會放到低位字節(jié), 0x 00 00 00 08 處的數(shù)據是 0x02 放到高位字節(jié),最終這兩個字節(jié)的數(shù)據是 0x 02 01

網絡字節(jié)序

所有的協(xié)議都是人類編制定的,大端對人們閱讀更友好,所以 IEEE 標準協(xié)會規(guī)定除非有明確說明,否則網絡協(xié)議都使用大端字節(jié)序, 像 TCP/IP 就是如此

還記得我們在編寫網絡程序的時候,傳入 connect 函數(shù)實參中的 端口號嗎, 傳入之前需調用 htons 函數(shù)將其轉成網絡字節(jié)序,也就是要轉成大端字節(jié)序,下面是部分代碼示例

  1. struct sockaddr_in addr; 
  2.  
  3. addr.sin_family = AF_INET; 
  4.  
  5. addr.sin_addr.s_addr = inet_addr("192.168.1.10"); 
  6.  
  7. addr.sin_port = htons( 5000 ); 
  8.  
  9. connect( clientfd, (struct sockaddr *)&addr, sizeof(addr)) ) 

上面紅色的 htons 函數(shù)的作用是將 端口號 由主機字節(jié)序轉成網絡字節(jié)序,網絡字節(jié)序大多時候都是固定為大端序的,但不同的機器,主機序卻不一樣,如果本身就已經是大端了,調用 htons 函數(shù),返回值和實參是一樣的,如果本身是小端,結果會轉成大端的形式,具體的數(shù)值也會不一樣

怎么判斷大小端

上面提到了主機字節(jié)序,那如何知道當前機器是大端還是小端呢 ?

因為操作系統(tǒng)必須適配所有類型的 CPU ,所以對于操作系統(tǒng)來說,大端和小端它都是支持的

為了讓程序易于判斷當前平臺是大端還是小端,Linux 下 glibc 庫提供了下面幾個宏定義

  1. BIG_ENDIAN # 大端序 
  2.  
  3. LITTLE_ENDIAN # 小端序 
  4.  
  5. BYTE_ORDER # 字節(jié)序 

下面是測試代碼 test.c 文件

  1. #include <stdio.h> 
  2. int main(int argc, char *argv[]) 
  3.     if(BYTE_ORDER == BIG_ENDIAN) 
  4.     { 
  5.         printf("big endian...\n"); 
  6.     } 
  7.     else 
  8.     { 
  9.         printf("little endian...\n"); 
  10.     } 

執(zhí)行 gcc -g -o test test.c 命令進行編譯,運行測試程序,結果如下:

  1. [root@localhost test]# ./test 
  2.  
  3. little endian... 

由此,可以知道當前平臺是小端字節(jié)序

除了用上面的方法之外,我們可以根據大端和小端的特點,自己寫代碼獲取,修改 test.c 文件,內容如下

  1. #include <stdio.h> 
  2. int main(int argc, char *argv[]) 
  3.     union 
  4.     { 
  5.         unsigned short i; 
  6.         char ch[2]; 
  7.     }un; 
  8.      
  9.     un.i = 0x0102; 
  10.     if(0x01 == un.ch[0]) 
  11.     { 
  12.          printf("big endian...\n"); 
  13.     } 
  14.     else 
  15.     { 
  16.          printf("little endian...\n"); 
  17.     } 

編譯并運行,結果如下:

  1. [root@localhost test]# ./test 
  2.  
  3. little endian... 

可以看出,不管是通過系統(tǒng)庫提供的宏來判斷還是自行封裝接口來判斷機器的字節(jié)序都是可行的

最后,如果想知道 LITTLE_ENDIAN、 BIG_ENDIAN 、BYTE_ORDER 宏定義的詳細情況,可以查看 glibc 源碼,它們在 glibc-2.17\string\endian.h 以及 glibc-2.17\sysdeps\x86\bits\endian.h 文件中

注意:不同版本的 glibc 源碼,具體的位置可能有差異,我使用的是 glibc-2.17 版本

大端小端的轉換

熟悉了大端和小端特點,它們之間的轉換就簡單了,對于兩字節(jié)來說,每個字節(jié)值不變,互換字節(jié)位置,如果是更多字節(jié)的話,最低位字節(jié)和最高位字節(jié)交換,次低位字節(jié)與次高位字節(jié)交換,直到所有字節(jié)都完成了一遍交換為止

比如:下面是小端轉大端的偽代碼

  1. #小端轉大端  假設:ch 和 i  是小端序 
  2.  
  3. char ch[2]; 
  4.  
  5. int i = 0; 
  6.  
  7. # x 是大端字節(jié)序 
  8. x = ch[1] << 8 | ch[0]  
  9.  
  10. # y 是大端字節(jié)序 
  11. y =   ( (i & 0xff000000) >> 24 ) |  ( (i & 0x00ff0000) >> 8 ) | ( (i & 0x0000ff00) << 8 )  | ( (i & 0x000000ff) << 24 ) 

變量 i 字節(jié)序轉換說明:按照從左到右的順序,把 i 的第一個字節(jié)右移 3 個字節(jié)( 24 bit ),第二個字節(jié)右移 1 字節(jié) ( 8 bit ),第三個字節(jié)左移 1 字節(jié) ( 8 bit ),第四個字節(jié)左移 3 個字節(jié) ( 24 bit ),最后把移位后的字節(jié)組合起來就可以了

在實際的程序處理中,不應該出現(xiàn)字節(jié)序的問題,只有 "網絡字節(jié)序" 和 "主機字節(jié)序" ,需要轉換字節(jié)序時,使用 ntohl, ntohs, htonl, htons 等函數(shù)即可

  1. ntohl       # uint32 類型 網絡序轉主機序 
  2. htonl       # uint32 類型 主機序轉網絡序 
  3.  
  4. ntohs       # uint16 類型 網絡序轉主機序 
  5. htons       # uint16 類型 主機序轉網絡序 

小結

本文詳述了字節(jié)序的一些知識,開發(fā)網絡應用的時候會涉及到字節(jié)序的相關問題,所以,花點兒時間弄明白還是很有必要的

 

責任編輯:武曉燕 來源: Linux開發(fā)那些事兒
相關推薦

2024-02-20 21:34:16

循環(huán)GolangGo

2021-08-27 07:06:10

IOJava抽象

2024-09-09 00:00:00

編寫技術文檔

2023-04-03 00:09:13

2023-06-30 08:18:51

敏捷開發(fā)模式

2022-05-24 08:21:16

數(shù)據安全API

2023-08-10 08:28:46

網絡編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2023-09-10 21:42:31

2024-11-27 16:07:45

2024-09-30 09:33:31

2021-10-26 09:55:52

CAP理論分布式

2023-11-06 07:21:02

DBaaSApachealpha版本

2024-11-27 08:47:12

2022-08-30 13:48:16

LinuxMySQL內存

2021-11-04 06:58:31

CSS性能設備

2024-12-10 00:00:25

2023-07-27 07:46:51

SAFe團隊測試

2022-06-26 09:40:55

Django框架服務

2023-12-28 09:55:08

隊列數(shù)據結構存儲
點贊
收藏

51CTO技術棧公眾號

精品日产一区2区三区黄免费 | 黄色一级免费大片| 免费资源在线观看| 久久精品噜噜噜成人av农村| 美女av一区二区| 日韩网站在线播放| 六九午夜精品视频| 婷婷夜色潮精品综合在线| 日韩精品欧美在线| 午夜久久久久久久久久| 日韩精品欧美精品| 欧美人与物videos| 黄色国产在线播放| 色爱av综合网| 日韩欧美二区三区| 成人黄色一区二区| 国产亚av手机在线观看| 欧美激情在线一区二区三区| 国产高清一区视频| 一级日韩一级欧美| 午夜综合激情| 欧美激情a∨在线视频播放| 成人午夜福利一区二区| 在线精品自拍| 制服丝袜亚洲播放| 一区二区在线播放视频| 久久男人av资源站| 亚洲精品日韩综合观看成人91| 久久精品一区二区三区不卡免费视频| 国产精品高潮呻吟av| 亚洲综合二区| 国语自产精品视频在免费| 毛片视频免费播放| 精品国产乱码| 亚洲人成啪啪网站| 亚洲成人日韩在线| 91麻豆精品激情在线观看最新| 欧美日韩中文字幕精品| 成人免费观看视频在线观看| 2021中文字幕在线| 夜夜爽夜夜爽精品视频| 一区二区免费在线视频| 超碰国产在线观看| 久久久久久久久免费| 精品欧美一区二区三区久久久| 精品国产亚洲AV| 狠狠色丁香九九婷婷综合五月| 国产精品久久电影观看| 日本黄色一级视频| 久久性色av| 日韩av免费在线播放| 国语对白永久免费| 夜夜嗨av一区二区三区网站四季av| 欧美老少做受xxxx高潮| 国产精品嫩草影院俄罗斯| 日韩精品dvd| 在线视频一区二区| 一级片久久久久| 成人综合专区| 日韩专区在线观看| 亚洲最大的黄色网址| 在线中文字幕第一区| 久久91亚洲精品中文字幕奶水 | 精品久久影院| 亚洲无av在线中文字幕| 男人天堂av电影| 欧美精品一区二区三区精品| 在线播放国产一区中文字幕剧情欧美 | 中文幕av一区二区三区佐山爱| 欧美另类久久久品| 日本女人黄色片| www国产精品| 亚洲精品视频二区| 女人裸体性做爰全过| 久久久久国产| 韩国三级电影久久久久久| 日韩黄色在线播放| 三级在线观看一区二区| 国产日韩欧美电影在线观看| 国产高潮在线观看| jiyouzz国产精品久久| 欧美色图亚洲自拍| 黄色片网站在线| 亚洲成人一区在线| 少妇激情一区二区三区| 精品一区二区三区中文字幕在线| 精品捆绑美女sm三区| 日本激情小视频| 一区二区三区午夜探花| 国模吧一区二区| 波多野结衣影片| 国产成人自拍网| 欧美日韩精品久久久免费观看| 日本中文字幕视频在线| 亚洲一区在线观看免费观看电影高清| 日韩在线一级片| 在线免费成人| 精品日韩在线一区| 37p粉嫩大胆色噜噜噜| 欧美国产一级| 91爱视频在线| 国产精品久久久国产盗摄| 99久久婷婷国产综合精品| 亚洲视频在线二区| 日韩激情电影免费看| 6080午夜不卡| 天堂久久精品忘忧草| 欧美三级小说| 国产日韩亚洲欧美| 日韩资源在线| 一区二区三区四区亚洲| 可以看毛片的网址| 成人在线视频免费| 亚洲高清在线观看| jizz日本在线播放| 99精品国产在热久久| 亚洲一区二区三区在线免费观看| 香港三日本三级少妇66| 国产精品欧美极品| 精品少妇在线视频| 日韩一级特黄| 亚洲精品丝袜日韩| 欧美日韩精品在线观看视频| 男女男精品视频| 久久婷婷国产综合尤物精品| 黄网站app在线观看| 欧美午夜无遮挡| 91人人澡人人爽| 日韩理论电影大全| 日本高清视频精品| 国产又爽又黄网站亚洲视频123| 国产精品短视频| 男人操女人免费| h视频久久久| 久久精品美女视频网站| 麻豆精品久久久久久久99蜜桃| 国产精品一二三四区| 一区二区视频在线免费| 日韩欧美精品电影| 亚洲精品videossex少妇| www青青草原| 蜜桃视频一区二区| 任我爽在线视频精品一| 国产精品论坛| 日韩av在线直播| 精品午夜福利在线观看| 精品一区二区三区在线观看国产 | 亚洲精品字幕在线| 国产精品久久久久久久久动漫| 亚洲欧洲日产国码无码久久99| 99精品国产高清一区二区麻豆| 中文字幕在线看视频国产欧美在线看完整| 日本在线播放视频| 91理论电影在线观看| 很污的网站在线观看| а√中文在线天堂精品| 欧美成人午夜视频| 国产喷水福利在线视频| 亚洲色图在线看| 九一精品久久久| 成人影院在线| 国产精品人人做人人爽| 成年人免费在线视频| 欧洲一区在线电影| 日韩女同一区二区三区| 国产日韩亚洲欧美精品| 久久99精品久久久久久水蜜桃| av在线视屏| 亚洲精品电影网在线观看| 亚洲综合一二三| av电影在线观看一区| 国产h视频在线播放| 国产欧美一区二区三区精品观看| 日韩av观看网址| 高清美女视频一区| 欧美日韩dvd在线观看| 色偷偷www8888| 国产伦精品一区二区三区在线观看| 国产精品免费看久久久无码| 97一区二区国产好的精华液| 亚洲97在线观看| 国模吧精品人体gogo| 欧美系列在线观看| 国产高潮流白浆| 国产寡妇亲子伦一区二区| 僵尸世界大战2 在线播放| 青草久久视频| 国产精品视频公开费视频| 黄色av电影在线播放| 欧美成人性福生活免费看| 国产女同在线观看| 中文字幕在线观看一区二区| 中文字幕在线视频一区二区| 精久久久久久| 日韩国产精品一区二区| www.久久久久爱免| 1769国内精品视频在线播放| 巨大荫蒂视频欧美另类大| 精品国产乱码久久久久久图片| 天堂中文字幕在线观看| 中文字幕av一区 二区| 欧美色图校园春色| 亚洲欧美高清| 黑人巨茎大战欧美白妇| 综合国产视频| 97操在线视频| 精品国产欧美日韩一区二区三区| 欧美尺度大的性做爰视频| 日韩在线免费看| 日韩欧美国产一区二区在线播放| 亚洲天堂一区在线观看| 亚洲日本欧美天堂| 三级男人添奶爽爽爽视频 | 久久免费高清视频| jizz在线观看视频| 欧美美女视频在线观看| 潘金莲一级淫片aaaaaa播放| 亚洲自拍偷拍网站| 91社区视频在线观看| 成人久久18免费网站麻豆| 中文字幕在线观看第三页| 国产亚洲网站| 欧美少妇一区二区三区| 精品一区av| 精品中文字幕一区| 精品三级国产| 国产精品极品美女粉嫩高清在线| 女人让男人操自己视频在线观看 | 亚洲免费在线| 国产黄色激情视频| 久久久久久久久久久久久久久久久久 | 国语对白永久免费| 亚洲国产一二三| 日韩欧美国产成人精品免费| 久久免费偷拍视频| 一出一进一爽一粗一大视频| 国产成人av电影| 日本精品一区在线| 麻豆国产91在线播放| www.色偷偷.com| 老司机精品导航| 91免费视频网站在线观看| 欧美日韩亚洲一区在线观看| 丰满人妻一区二区三区53号| 91成人网在线观看| 午夜一区二区三视频在线观看| 一区二区三区四区在线看| 精品一区二区三区国产| 国产精品对白久久久久粗| 大波视频国产精品久久| 日韩成人久久| 91超碰在线免费观看| 日本99精品| 91人成网站www| 1204国产成人精品视频| 亚洲综合大片69999| 国产精品久久免费视频| 91在线中文字幕| 国产精品18| 国产精品一码二码三码在线| 国产调教精品| 国产日韩一区二区| 日韩a级大片| 精品日本一区二区三区在线观看| 免费av一区| 欧美一区少妇| 日韩电影一区| 一卡二卡3卡四卡高清精品视频| 色男人天堂综合再现| 亚洲爆乳无码精品aaa片蜜桃| 欧美精品激情| 伊人成色综合网| 日本亚洲欧美天堂免费| 亚洲免费一级视频| 国产999精品久久| 视频免费在线观看| 久久久高清一区二区三区| 国产性猛交xx乱| 亚洲欧美电影院| 麻豆久久久久久久久久| 在线观看av一区| 国产乱码精品一区二区三区精东| 日韩欧美一级精品久久| 六月婷婷综合网| 在线播放日韩专区| a篇片在线观看网站| 久久久亚洲成人| 电影一区二区三区| 国产在线播放91| 久久免费视频66| 午夜精品福利一区二区| 欧美在线不卡| 97国产精东麻豆人妻电影| 日本午夜精品视频在线观看| 师生出轨h灌满了1v1| 久久久综合视频| 免费成人美女女在线观看| 亚洲成av人片一区二区| 91丨九色丨海角社区| 欧美一卡2卡3卡4卡| 熟妇高潮一区二区三区| 色七七影院综合| av日韩中文| 国产一区二区视频在线观看| 嗯用力啊快一点好舒服小柔久久| 亚洲免费久久| 日韩视频一区| 潘金莲激情呻吟欲求不满视频| 99久久综合精品| 国产精品麻豆一区| 在线观看免费一区| 亚洲国产精品成人久久蜜臀| 国产亚洲成av人片在线观看桃| av网站在线看| 国产999在线观看| 中文一区二区三区四区| 欧美国产视频在线观看| 一区二区免费不卡在线| 热久久精品免费视频| 国产成人精品亚洲日本在线桃色| 久久精品成人av| 五月婷婷久久综合| av高清一区二区| 宅男66日本亚洲欧美视频| 男人av在线播放| 国产乱码一区| 国内精品久久久久久久影视麻豆| 国产高清视频网站| 久久色在线视频| 在线观看黄网站| 亚洲第一页中文字幕| 最新国产在线拍揄自揄视频| 国产精品美女午夜av| 欧美**字幕| 黄色一级在线视频| 成人永久免费视频| 中文字幕在线有码| 欧美在线小视频| 成年人在线看| 国产精品久久激情| 少妇精品久久久| 男人日女人下面视频| 成人美女在线视频| 国产一级片免费| 日韩欧美一区二区视频| 久草中文在线| 91精品婷婷国产综合久久蝌蚪| 欧美gay男男猛男无套| 色七七在线观看| 国产三级三级三级精品8ⅰ区| 成年人免费看毛片| 亚洲欧美一区二区三区在线| 美女在线视频免费| 国产一区国产精品| 亚洲国产激情| 蜜桃av免费看| 在线免费观看视频一区| 触手亚洲一区二区三区| 日韩美女视频在线观看| 欧美一区二区麻豆红桃视频| 免费看a级黄色片| 国产精品欧美极品| 影音先锋国产在线| 久久精品夜夜夜夜夜久久| 激情久久免费视频| 黄色三级中文字幕| 97久久超碰国产精品| 好看的av在线| 国产一区二区三区丝袜| 四虎影视精品永久在线观看| 国产黄色激情视频| 91免费看`日韩一区二区| 九九精品免费视频| 在线午夜精品自拍| 久久99精品久久久野外观看| 久久av高潮av| 国产网站一区二区三区| 中国老头性行为xxxx| 中文字幕亚洲欧美在线| 性欧美video另类hd尤物| 最近中文字幕免费mv| 国产成人精品综合在线观看| 亚洲免费激情视频| 在线精品播放av| 一区二区在线免费播放| 日韩欧美国产综合在线| 久久久不卡网国产精品一区| 一级黄色免费片| 18久久久久久| 91视频精品| 午夜视频在线观看国产| 夜夜亚洲天天久久| 2021av在线| 国产精品视频免费一区| 天堂精品中文字幕在线| 欧美日韩在线观看成人| 亚洲人成欧美中文字幕| 日韩欧美高清一区二区三区| 欧美一级片免费播放| 国产性天天综合网|