2011-10-16 29 views
27

的第n個字節,我知道你能得到的第一個字節用Ç得到整數

int x = number & ((1<<8)-1); 

int x = number & 0xFF; 

但我不知道如何獲得一個整數的第n個字節。 例如,1234是00000000 00000000 00000100 11010010作爲32位整數 如何獲得所有這些字節?第一個將是210,第二將是4,最後兩個將是0。

+1

您的示例中已經使用了位移運算符'<<'。你怎麼能使用移位操作符從你的號碼中獲取不同的位? –

+0

嘗試另一位移位運算符。 –

+1

請記住,「第一個字節」 - 正如您在此使用的那樣 - 可能不是內存中的第一個字節。你的例子1234很容易在最低地址爲'11010010',而在最高地址爲'00000000'。 – Thanatos

回答

60
int x = (number >> (8*n)) & 0xff; 

其中n爲0的第一個字節,1代表的第二個字節,等等

+12

請使用括號!我永遠不會成員''''或'*'具有更高的優先級。 –

2

int nth = (number >> (n * 8)) & 0xFF;

將其轉換爲最低字節並採用「熟悉」的方式。

12

對於第(n + 1)個在它們出現在存儲器的任何字節(也最不到most-上小端機器等的x86顯著):

int x = ((unsigned char *)(&number))[n]; 

對於第(n 1)個字節從至少對大端機器最顯著:

int x = ((unsigned char *)(&number))[sizeof(int) - 1 - n]; 

對於第(n + 1)個字節從最低到最高顯著(任何端):

int x = ((unsigned int)number >> (n << 3)) & 0xff; 

當然,這些都假設爲n < sizeof(int),而且numberint

+0

如果我們有一個int數組,答案將如何改變?我的意思是如何從int數組的開頭獲得第n個字節的值? – HoseinGhanbari

+0

@HoseinGhanbari同樣的方法,但是找到'(n/sizeof(int))'數組元素的'(n%sizeof(int))'字節。 – Dmitri