在計算機記憶體中,通常是以位元組(byte),也就是 8 個位(bit)為基本儲存單元(也有以 16 位為基本儲存單元的)。對於跨越多個位元組的資料型別(比如 int 長 4 個位元組),如何在記憶體中對這些位元組進行排序有兩種常見的方法:大端法(big-endian)和小端法(little-endian)
【注】首先不管是大端法還是小端法儲存,計算機在記憶體中存放資料的順序都是從低位址到高位址,所不同的是首先取低位元組的資料存放在低位址還是取高位元組資料存放在低位址。
高位放在低位址就是大端法
低位放在低位址就是小端法
例如0x0a0b0c0d的在大端和小端中的存放方式分別為:
清單一:利用c裡的聯合型別
1 #include2清單二:利用指標3union myunion4;
89intmain()
10
1 #include2大多數inter相容機只用小端法,android和ios也只用小端法;ibm和oracle的大多數機器用大端法,但它們的製造的個人電腦使用的是inter相容的處理器,因此使用小端法。3 typedef unsigned char *byte_pointer;45
void
show_bytes(byte_pointer start, size_t len)612
13void show_int(int
x)14
1718
void show_float(float
x)19
22void show_pointer(void *x)
2326
27void test_show_bytes(int
val)
2836
37int
main()
38
令人吃驚的是,對於哪種位元組順序更合適這個問題,人們表現的非常情緒化,從它的名字**就可看出
【「端」的起源】
術語「little endian(小端)」和「big endian(大端)」出自jonathan swift的《格列佛遊記》一書,其中兩個派別交戰的原因僅僅因為一方認為要從較大的一端敲開雞蛋,而另一方認為要從小的一端敲開雞蛋。
在作者的那個年代,swift是藉此諷刺英國和法國之間的持續衝突(難道命名者也是藉此諷刺大端法和小端法的矛盾,,,只是臆想,蒟蒻什麼也沒說)
小端法 大端法
小端法little endian 諸如intel的機器就是採用這種規則 高位址存高位資料 大端法big endian 諸如ibm,motoral,sun採用此規則 低位址存高位資料 如需儲存oxeeaabbcc此數 如採用大端法儲存如下 address low high ee aa bb cc 如採...
大端法與小端法
一 什麼是位元組序 位元組序,顧名思義位元組的順序,再多說兩句就是大於乙個位元組型別的資料在記憶體中的存放順序 乙個位元組的資料當然就無需談順序的問題了 指的是記憶體的高 低位址,計算機在記憶體中存放資料的順序都是從低位址到高位址 高 低位元組 有些文章中稱低位位元組為最低有效位,高位位元組為最高有...
位元組序 大端法和小端法
在幾乎所有的機器上,多位元組物件都被儲存為連續的位元組序列,物件的位址為所使用位元組中的最小位址。例如,假設乙個型別為int的變數x的位址為0x100,即 x的值為0x100。那麼x的4個位元組將被儲存在 儲存器的0x100,0x101,0x102和0x103的位置。位元組序即為多位元組物件儲存在記...