Calvin's Tech Space

          成于堅忍,毀于浮躁

             :: 首頁 :: 聯系 :: 聚合  :: 管理

          公告

          搜索

          •  

          最新評論

          所有網絡協議都是采用big endian的方式來傳輸數據的。所以有時我們也會把big endian方式稱之為網絡字節序。當兩臺采用不同字節序的主機通信時,在發送數據之前都必須經過字節序的轉換成為網絡字節序后再進行傳輸。

          ???判斷小端還是大端規則的方法:

          int x = 1;
          if(*(char *)&x == 1)//取x指針強制轉換為char*類型再取值,此時取到的值是int最低字節值
          ????printf(“little-endian\n”);
          else
          ????printf(“big-endian\n”);

          ????另外補充:

          1.BIG-ENDIAN、LITTLE-ENDIAN、跟CPU有關的,每一種CPU不是BIG-ENDIAN就是LITTLE- ENDIAN、。IA架構的CPU中是Little-Endian,而PowerPC 、SPARC和Motorola處理器。這其實就是所謂的主機字節序。而網絡字節序是指數據在網絡上傳輸時是大頭還是小頭的,在Internet的網絡字 節序是BIG-ENDIAN。所謂的JAVA字節序指的是在JAVA虛擬機中多字節類型數據的存放順序,JAVA字節序也是BIG-ENDIAN。

          2.所以在用C/C++寫通信程序時,在發送數據前務必用htonl和htons去把整型和短整型的數據進行從主機字節序到網絡字節序的轉換,而接 收數據后對于整型和短整型數據則必須調用ntohl和ntohs實現從網絡字節序到主機字節序的轉換。如果通信的一方是JAVA程序、一方是C/C++程 序時,則需要在C/C++一側使用以上幾個方法進行字節序的轉換,而JAVA一側,則不需要做任何處理,因為JAVA字節序與網絡字節序都是BIG- ENDIAN,只要C/C++一側能正確進行轉換即可(發送前從主機序到網絡序,接收時反變換)。如果通信的雙方都是JAVA,則根本不用考慮字節序的問 題了。


          轉自http://www.embest.net/index.php/archives/259

          posted on 2011-11-15 15:36 calvin 閱讀(942) 評論(0)  編輯  收藏 所屬分類: C
          主站蜘蛛池模板: 泸水县| 盱眙县| 瑞安市| 汉寿县| 建湖县| 邻水| 丰原市| 合阳县| 故城县| 建阳市| 达州市| 仁怀市| 邯郸市| 台南市| 岳普湖县| 佛学| 新和县| 湾仔区| 鄯善县| 雷山县| 黔江区| 合肥市| 九台市| 离岛区| 青神县| 靖安县| 马公市| 临沭县| 财经| 德化县| 观塘区| 安图县| 鲁甸县| 开原市| 偃师市| 泸水县| 淳化县| 西盟| 大厂| 巴林右旗| 友谊县|