的第n個字節,我知道你能得到的第一個字節用Ç得到整數
int x = number & ((1<<8)-1);
或
int x = number & 0xFF;
但我不知道如何獲得一個整數的第n個字節。 例如,1234是00000000 00000000 00000100 11010010作爲32位整數 如何獲得所有這些字節?第一個將是210,第二將是4,最後兩個將是0。
的第n個字節,我知道你能得到的第一個字節用Ç得到整數
int x = number & ((1<<8)-1);
或
int x = number & 0xFF;
但我不知道如何獲得一個整數的第n個字節。 例如,1234是00000000 00000000 00000100 11010010作爲32位整數 如何獲得所有這些字節?第一個將是210,第二將是4,最後兩個將是0。
int x = (number >> (8*n)) & 0xff;
其中n爲0的第一個字節,1代表的第二個字節,等等
請使用括號!我永遠不會成員''''或'*'具有更高的優先級。 –
int nth = (number >> (n * 8)) & 0xFF;
將其轉換爲最低字節並採用「熟悉」的方式。
對於第(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)
,而且number
是int
。
如果我們有一個int數組,答案將如何改變?我的意思是如何從int數組的開頭獲得第n個字節的值? – HoseinGhanbari
@HoseinGhanbari同樣的方法,但是找到'(n/sizeof(int))'數組元素的'(n%sizeof(int))'字節。 – Dmitri
您的示例中已經使用了位移運算符'<<'。你怎麼能使用移位操作符從你的號碼中獲取不同的位? –
嘗試另一位移位運算符。 –
請記住,「第一個字節」 - 正如您在此使用的那樣 - 可能不是內存中的第一個字節。你的例子1234很容易在最低地址爲'11010010',而在最高地址爲'00000000'。 – Thanatos