『壹』 大端模式和小端模式的區別及如何判斷的存儲器的模式
一個數需要超過一個位元組來存儲時,就有大端和小端的區別,只用一個位元組時,無所謂大小端
低位的放在低地址,也就是小個在前,叫小端,反之叫大端
c和c++需要面對這樣的問題,java等高級語言已經屏蔽這個差異,不需要額外處理
在c中,可以用以下代碼片段來判斷是大端還是小端
union {char c; int i;} u;
u.i = 1;
if(u.c == 1){//小端}
else{//大端}
『貳』 大端模式、小端模式和MSB、LSB是一個概念嗎兩者有何區別
在網路通信方面,大家說的更多的 是:「Big-Endian」和「Small-Endian」的問題。
指的都是對於多位元組的數據類型(比如4位元組的32位整數),其多個位元組的順序問題,是最高位元組在前(Big-Endian)還是最低位元組在前 (Small-Endian)。
比如對於123456789這個整數,其16進制為0x075BCD15,那麼按照Big-Endian的方式,它在網路上傳輸(或者在內存里存儲)的4 個位元組依次是:07 4B CD 15,而Small-Endian的順序正相反,是:15 CD 4B 07。
MSB 和LSB 雖然跟這個事情看起來有點相似,但不是一回事。通常,一個晶元的管腳中,對於一個多 比特的信號,比如32根的地址線,從低開始按0到31編個號。MSB 就是31,LSB 就 是0。那麼如果標記為:ADDR[31:0]就是MSB first的方式,如果標記為ADDR[0:31]就是LSB first的方式。
『叄』 請問,大端法小端法對C語言結構體有影響嗎謝謝
機器的大小端,只是表示數據在內存中存放的順序不同。對數據結構本身沒有影響。
『肆』 什麼是大端模式和小端模式
如果將一個32位的整數0x12345678存放到一個整型變數(int)中,這個整型變數採用大端或者小端模式在內存中的存儲由下表所示。為簡單起見,本書使用OP0表示一個32位數據的最高位元組MSB(Most Significant Byte),使用OP3表示一個32位數據最低位元組LSB(Least Significant Byte)。
---------------------------
地址偏移大端模式小端模式
0x00 12(OP0) 78(OP3)
0x01 34(OP1) 56(OP2)
0x02 56(OP2) 34(OP1)
0x03 78(OP3) 12(OP0)
---------------------------
如果將一個16位的整數0x1234存放到一個短整型變數(short)中。這個短整型變數在內存中的存儲在大小端模式由下表所示。
---------------------------------
地址偏移大端模式小端模式
0x00 12(OP0) 34(OP1)
0x01 34(OP1) 12(OP0)
-------------------------------------
『伍』 什麼是大小端模式 大小端模式的現狀
所謂的大端模式(Big-endian),是指數據的高位元組,保存在內存的低地址中,而數據的低位元組,保存在內存的高地址中,這樣的存儲模式有點兒類似於把數據當作字元串順序處理:地址由小向大增加,而數據從高位往低位放
『陸』 關於大端小端的具體分析求解
#include <stdio.h>
main(){
typedef unsigned char *byte;
int a = 0x01020304;
byte start = (byte) &a;
if(start[0] == 4) <-此處怎麼調整 printf("小端存儲\n");
else if(start[0] == 1)
printf("大端存儲\n");
else
printf("error\n");
return 0;
}
我要說我完全看不懂你說的中國話也不是不可以……
『柒』 大端存儲和小端存儲各自的優缺點是什麼
沒有什麼優缺點.
最好輸入輸出流,程序一致用同一種方式,全用big endian,或 little endian. 省去byte 交換。
『捌』 大端模式和小端模式
具體如下:
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處理器還可以由硬體來選擇是大端模式還是小端模式。