2011-10-16 10 views
27

मुझे पता है कि आपसी पूर्णांक की nth बाइट प्राप्त करें

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

या

int x = number & 0xFF; 

int x = number & 0xFF; 

का उपयोग करके पहला बाइट प्राप्त कर सकते हैं लेकिन मुझे नहीं पता कि एक पूर्णांक के nth बाइट को कैसे प्राप्त किया जाए। उदाहरण के लिए, 1234 00000000 00000000 00000100 11010010 है 32 बिट पूर्णांक मैं उन सभी बाइट्स को कैसे प्राप्त कर सकता हूं? पहला वाला 210 होगा, दूसरा 4 होगा और अंतिम दो 0.

होगा
+1

आप पहले से ही अपने उदाहरण में बिट शिफ्ट ऑपरेटर '<<' का उपयोग कर रहे हैं। आप अपने नंबर से अलग बिट्स प्राप्त करने के लिए शिफ्ट ऑपरेटर का उपयोग कैसे कर सकते हैं? –

+0

अन्य बिट-शिफ्ट ऑपरेटर आज़माएं। –

+1

ध्यान रखें कि "पहला बाइट" - जैसा कि आपने इसे यहां उपयोग किया है - स्मृति में पहला बाइट नहीं हो सकता है। आपका उदाहरण, 1234, सबसे कम पते पर '11010010' बहुत आसानी से हो सकता है, और उच्चतम पते पर '00000000' हो सकता है। – Thanatos

उत्तर

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

जहां n पहली बाइट, दूसरी बाइट के लिए 1, आदि

+12

कृपया ब्रांड्स का उपयोग करें! मैं कभी भी सदस्य नहीं कर सकता हूं कि '>>' या '*' की उच्च प्राथमिकता है या नहीं। –

2

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

के लिए 0 है

इसे सबसे कम बाइट में ले जाएं और इसे "परिचित" तरीके से लें।

12

के लिए (एन + 1) वें जो कुछ क्रम में वे स्मृति में प्रदर्शित में बाइट (जो भी 86 की तरह छोटे-endian मशीन पर महत्वपूर्ण most- को least- है):

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

के लिए (एन +1) वें बाइट से कम से सबसे बड़े एंडियन मशीन पर महत्वपूर्ण रहे हैं: कम से कम से सबसे महत्वपूर्ण (किसी भी endian करने के लिए)

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

(n + 1 के लिए) वें बाइट:

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

बेशक, ये सभी मानते हैं कि n < sizeof(int), और number एक int है।

+0

यदि हमारे पास int की एक सरणी है, तो उत्तर कैसे बदल जाएगा? मेरा मतलब है कि मैं int int की शुरुआत से nth बाइट का मूल्य कैसे प्राप्त कर सकता हूं? – HoseinGhanbari

+0

@ होसेनगहनबारी वही तरीका, लेकिन '(एन% आकार (int)) '-n/sizeof (int))' -th सरणी तत्व' -थ बाइट 'ढूंढें। – Dmitri

संबंधित मुद्दे