導航:首頁 > 編程語言 > java屬於大端模式c屬於小端模式

java屬於大端模式c屬於小端模式

發布時間:2023-09-16 10:36:48

㈠ 大端模式和小端模式的區別及如何判斷的存儲器的模式

一個數需要超過一個位元組來存儲時,就有大端和小端的區別,只用一個位元組時,無所謂大小端
低位的放在低地址,也就是小個在前,叫小端,反之叫大端
c和c++需要面對這樣的問題,java等高級語言已經屏蔽這個差異,不需要額外處理
在c中,可以用以下代碼片段來判斷是大端還是小端
union {char c; int i;} u;
u.i = 1;
if(u.c == 1){//小端}
else{//大端}

㈡ 大端模式和小端模式

具體如下:


1、大端模式:

大端模式,是指數據的高位,保存在內存的低地址中,而數據的低位,保存在內存的高地址中,這樣的存儲模式類似於把數據當作字元串順序處理。

地址由小向大增加,而數據從高位往低位放;小端模式,是指數據的高位保存在內存的高地址中,而數據的低位保存在內存的低地址中,這種存儲模式將地址的高低和數據位權有效地結合起來,高地址部分權值高,低地址部分權值低,和我們的邏輯方法一致。

在大端模式下,前16位應該這樣讀: e6 84 6c 4e ( 假設int佔4個位元組)。

記憶方法: 地址的增長順序與值的增長順序相反。

2、小端模式例子:

0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000。

0000440: b484 6c4e 004e ed00 0000 0000 0100 0000。

在小端模式下,前16位應該這樣讀: 4e 6c 84 e6( 假設int佔4個位元組)。

記憶方法: 地址的增長順序與值的增長順序相同。

大小端模式:

為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個地址單元都對應著一個位元組,一個位元組為 8bit。但是在C語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對於位數大於 8位的處理器。

例如16位或者32位的處理器,由於寄存器寬度大於一個位元組,那麼必然存在著一個如何將多個位元組安排的問題。因此就導致了大端存儲模式和小端存儲模式。例如一個16bit的short型x,在內存中的地址為0x0010,x的值為0x1122,那麼0x11為高位元組,0x22為低位元組。

對於 大端模式,就將0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,剛好相反。我們常用的X86結構是小端模式,而KEIL C51則為大端模式。很多的ARM,DSP都為小端模式。有些ARM處理器還可以由硬體來選擇是大端模式還是小端模式。

㈢ java網路編程是大端還是小端

網路傳輸中採用的大端標記法,也就是說先傳比較高權值的數字, 就像 12一樣,先傳10,在傳2,就算丟了後面一個,損失也不是太大。

小端就跟機器有關了。你在封裝一個int之類的數字,封裝進去之後就應該是大端的了,可以調用裡面的 htons() 或者htonl()函數來轉化成大端的(當然你也可以自己按照大端的方式封裝,就會麻煩一點而已)。傳輸過程中當然也是大端的,接受到的buffer裡面當然也是大端的,但是你在讀取這個int類型的時候,就需要相應的將大端轉化為小端了(採用ntohs() 函數或ntohl()函數來實現),這樣你讀取到的就是原來的數字。

可想而知,假如你用機器A和B通信,而且A和B的端序都是一樣的話,中間自然就不用轉換來轉換去了。但是這不是好習慣,因為假如移植到另外端序的機器的話就需要修改代碼笭害蒂轎酈計墊襲叮陋。所以最好還是用那幾個函數。

㈣ 大小端模式的簡介

所謂的大端模式(Big-endian),是指數據的高位元組,保存在內存的低地址中,而數據的低位元組,保存在內存的高地址中,這樣的存儲模式有點兒類似於把數據當作字元串順序處理:地址由小向大增加,而數據從高位往低位放;
例子:
0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000
0000440: b484 6c4e 004e ed00 0000 0000 0100 0000
在大端模式下,前32位應該這樣讀: e6 84 6c 4e ( 假設int佔4個位元組)
記憶方法: 地址的增長順序與值的增長順序相同 所謂的小端模式(Little-endian),是指數據的高位元組保存在內存的高地址中,而數據的低位元組保存在內存的低地址中,這種存儲模式將地址的高低和數據位權有效地結合起來,高地址部分權值高,低地址部分權值低,和我們的邏輯方法一致。
例子:
0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000
0000440: b484 6c4e 004e ed00 0000 0000 0100 0000
在小端模式下,前32位應該這樣讀: 4e 6c 84 e6( 假設int佔4個位元組)
記憶方法: 地址的增長順序與值的增長順序相反 對於0x11223344 儲存如下
下面這段代碼可以用來測試一下你的編譯器是大端模式還是小端模式:
short int x;
char x0,x1;
x=0x1122;
x0=((char*)&x)[0]; //低地址單元
x1=((char*)&x)[1]; //高地址單元
若x0=0x11,則是大端; 若x0=0x22,則是小端......
上面的程序還可以看出,數據定址時,用的是低位位元組的地址。 #definesw16(x)((short)((((short)(x)&(short)0x00ffU)<<8)|(((short)(x)&(short)0xff00U)>>8)))

㈤ 位元組序大端、小端

一、定義:

大端模式(Big Endian):數據的高位元組,保存在內存的低地址中;數據的低位元組,保存在內存的高地址中。

小端模式(Little Endian):數據的高位元組,保存在內存的高地址中;數據的低位元組,保存在內存的低地址中。

例如:數字0x12 34 56 78在內存中的表示形式為:

1)大端模式:

低地址 -----------------> 高地址

0x12  |  0x34  |  0x56  |  0x78

2)小端模式:

低地址 ------------------> 高地址

0x78  |  0x56  |  0x34  |  0x12

可見,大端模式和字元串的存儲模式類似。

二、如何判斷機器的位元組序

    通過將int強制類型轉換成char單位元組,通過判斷起始存儲位置。即等於 取b等於a的低地址部分

    聯合體union的存放順序是所有成員都從低地址開始存放,利用該特性可以輕松地獲得了CPU對內存採用Little-endian還是Big-endian模式讀寫

三、網路位元組序

 網路上傳輸的數據都是位元組流,對於一個多位元組數值,在進行網路傳輸的時候,先傳遞哪個位元組?也就是說,當接收端收到第一個位元組的時候,它將這個位元組作為高位位元組還是低位位元組處理,是一個比較有意義的問題; UDP/TCP/IP協議規定:把接收到的第一個位元組當作高位位元組看待,這就要求發送端發送的第一個位元組是高位位元組;而在發送端發送數據時,發送的第一個位元組是該數值在內存中的起始地址處對應的那個位元組,也就是說,該數值在內存中的起始地址處對應的那個位元組就是要發送的第一個高位位元組(即:高位位元組存放在低地址處);由此可見,多位元組數值在發送之前,在內存中因該是以大端法存放的; 所以說,網路位元組序是大端位元組序; 在實際中,當在兩個存儲方式不同的主機上傳輸時,需要藉助位元組序轉換函數。

閱讀全文

與java屬於大端模式c屬於小端模式相關的資料

熱點內容
在剪映app中怎麼查看視頻尺寸 瀏覽:9
linux文件成分包括 瀏覽:886
文件轉換免費的軟體 瀏覽:644
linuxwpsxlsx 瀏覽:482
小米手機怎麼上移動網路連接失敗怎麼辦 瀏覽:598
win10系統打開java 瀏覽:479
全日制編程什麼意思 瀏覽:447
筆記本創建區域網怎麼傳文件 瀏覽:871
怎樣查看id密碼 瀏覽:647
贛州極客晨星少兒編程怎麼樣 瀏覽:690
覺醒年代哪個app可以免費觀看 瀏覽:830
如何關閉win10觸摸屏幕 瀏覽:761
蘋果142不能傳文件 瀏覽:128
如何看歷史底部數據 瀏覽:230
怎麼在電腦上下軟體或安裝app 瀏覽:798
qq頭像電影截圖情侶 瀏覽:87
安卓的網路位置設置在哪 瀏覽:973
編程俠官網如何登錄 瀏覽:484
借貸王app怎麼樣 瀏覽:552
qq黑鑽手機怎麼開通 瀏覽:465

友情鏈接