国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

網絡字節序的問題

2019-11-17 05:15:49
字體:
來源:轉載
供稿:網友

  最近接觸到網絡字節序的概念 查了查資料 不是很明白 先引用一段材料:

字節順序是指占內存多于一個字節類型的數據在內存中的存放順序,通常有小端、大端兩種字節順序。小端字節序指低字節數據存放在內存低地址處,高字節數據存放在內存高地址處;大端字節序是高字節數據存放在低地址處,低字節數據存放在高地址處。基于X86平臺的PC機是小端字節序的,而有的嵌入式平臺則是大端字節序的。因而對int、uint16、uint32等多于1字節類型的數據,在這些嵌入式平臺上應該變換其存儲順序。通常我們認為,在空中傳輸的字節的順序即網絡字節序為標準順序,考慮到與協議的一致以及與同類其它平臺產品的互通,在程序中發數據包時,將主機字節序轉換為網絡字節序,收數據包處將網絡字節序轉換為主機字節序。

在本linux的書里介紹到INTEL的CPU使用的小端字節序 其他比MOTOROLA
68000系列CPU使用的是大端字節序 假如不轉換 將數據通過網絡發出時 比如MOTOROLA發一個16位數據:0X1234 傳送到INTEL時
就被INTEL解釋為0X3412 也就是4660成了13330 所以有時候需要一些函數來進行大小端字節序的轉換

關于這大小字節序的概念不是很想的明白 數據在
內存里是具體怎么存放的形式?為什么會有CPU解釋的不同?數據不是按12345678……這樣的順序一直排列的么?希望大人賜教 謝謝

不就是大小印地安記法嗎
1)從低到高存 (liittle edian)
例:0x1234
內存中是0x34 0x12
2)從高到低存 (big edian)
例:0x1234
內存中是0x12 0x34

如: 一個多字節值 0xFECDBA98,內存從地址100開始存放

降序: FE CD BA 98---->對應地址100 101 102 103

升序: 98 BA CD FE ---->same above

注重,我們的書寫表示法是從低字節位--->高字節位


至于為什么CPU解釋不同,可能是由于不同的體系構架在起始競爭時人為地制造

和對手不兼容性......害的我們這么慘,一碰到移植就要注重這個

C代碼的移植相對簡單原因之一就是由于C的連續存儲數據永遠保持從低地址到高

地址的索引........

小端字節序就是升序排列那種?
我們的書寫表示法是從低字節位--->高字節位 這個是什么意思呢?難道FECDBA98是從低到高(從左到右)嗎?

還有它排列是按單個字節來 還是按數據類型的?比如說是INT型就按兩個兩個排 就象0X1234 和0X3412 而不是0X1234 和0X4321?

我們的書寫表示法是從低字節位--->高字節位 這個是什么意思呢?難道FECDBA98是從低到高(從左到右)嗎?"




"還有它排列是按單個字節來 還是按數據類型的"

對于多字節數據才有這么一出

這樣理解吧
譬如:
內存地址生長方向為: 從左到右 由低到高(這是不變的)

數據為: 0x89ABCDEF

降序(Big-endian)大端字節序 存儲時 由左到右

升序(Little-endian)小端字節序 存儲時 由右向左

可以自己編一個小程序驗證一下(用C的數組)
更簡單的調用VC里的checkEndian()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 寿宁县| 北京市| 开鲁县| 色达县| 临沧市| 濉溪县| 北票市| 新巴尔虎右旗| 建水县| 盐城市| 会东县| 乌审旗| 阿克| 平泉县| 江孜县| 闽清县| 通榆县| 洪泽县| 彭水| 乐安县| 洞头县| 丽水市| 永康市| 景宁| 彰化县| 宣恩县| 万山特区| 井研县| 安义县| 刚察县| 江西省| 盐源县| 德钦县| 保山市| 陇西县| 洛扎县| 和林格尔县| 成武县| 德州市| 宣恩县| 谢通门县|