国产探花免费观看_亚洲丰满少妇自慰呻吟_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()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永善县| 澄江县| 玛曲县| 金山区| 广汉市| 岗巴县| 宣城市| 青海省| 格尔木市| 云阳县| 呼图壁县| 墨玉县| 彭水| 连南| 永善县| 合肥市| 肃北| 石狮市| 临城县| 会理县| 夏邑县| 徐水县| 永泰县| 莲花县| 隆子县| 黑河市| 蓬溪县| 新平| 浦东新区| 瓦房店市| 新安县| 鹤壁市| 浙江省| 视频| 疏勒县| 灵石县| 东阿县| 正安县| 平江县| 聂荣县| 连山|