當我們遇到跨多位元組的程式物件時,這時候就需要判定清楚兩個問題,乙個是物件的位址,另外乙個是儲存器的位元組排列情況。
位元組的排列不同的機器有著大端和小端之分,在不同型別的機器之間通過網路傳送二進位制資料時,接收程式字裡的位元組可能會出現反序排列,這時,網路應用程式的**必須得遵守一定的位元組順序規則。
下面是一段位元組表示的示例:
#include typedef unsigned char *byte_pointer;
void show_bytes(byte_pointer start,int len){
int i;
for(i=0;i執行結果:
$ ./show-bytes
39300000
a43aecfeff7f0000
21436587
a43aecfeff7f0000
執行機器是在linux 64上,最低有效位元組值先輸出,這說明是小端法機器。值得注意的是linux 64不同於linux 32的4位元組位址,它是8位元組位址,所以是8位元組的輸出。
這時候問題來了,為何不同的整型輸入,得到的卻是相同的指標位址。
定址和位元組順序
以前學習微機原理的時候,對大端小端的理解感覺很模糊,反正也不怎麼使用到。現在在看另外一本講計算機作業系統的書的時候,發現要在儲存器中表示乙個多位元組的物件的時候,很自然就會考慮到多個位元組的排列順序問題。比如乙個int型別的變數,它占有4個位元組大小,假如說它的起始位址是0x100,那麼它就會只能用...
定址和位元組順序 所謂的大小端
某些機器在儲存器中按照從最低有效位元組到最高有效位元組的順序儲存物件,這種方式稱之為小端法 而有些機器按照從最高有效位元組到最低有效位元組進行儲存,這種方式稱之為大端法。例項,乙個int型的資料0x12345678,佔四個位元組,假設位址為0x2000 0x2003。位址0x2000 0x2001 ...
按位元組定址和按字定址
位元組 byte,b 由 8 個位 bit 組成,它是儲存空間的基本計量單位。字 由若干個位元組組成。乙個字等於多少個位元組,與系統硬體有關,不應該毫無前提地說乙個字等於多少個位元組。16位系統 1字 word 2位元組 byte 16 bit 32位系統 如 win32 1字 word 4位元組 ...