2015-11-02 11 views
7

मैं यह जांचना चाहता हूं कि char में 8 बिट्स int के 32 बिट्स का एक सबस्ट्रिंग हैं या नहीं।सी - कैसे जांचें कि 8 बिट्स 32 बिट में हैं या नहीं?

for (int i = 0; i < 25; i++) { 
     int tmp = a; 
     tmp <<= 24; 
     tmp >>= 24; 
     int res = b^tmp; 
     res <<= 24; 
     res >>= 24; 
     if (res == 0) 
      return 1; 
     else 
      a >>= 1; 
    } 
    return 0; 

मैं इसे और अधिक कुशल हैं:

a = 0110 1010 1011 0100 0000 0110 1010 0010 (32 bit int) 
b = 0100 0000 (8 bit char) 

is_in(a, b) --> true 

यहाँ मेरी कोड है। कोई विचार?

+3

'A', या केवल बाइट-सीमाओं पर' "में" कहीं भी हो b' कर सकते हैं? और आपने अभी तक क्या प्रयास किया है? आपको अपने कोड के साथ क्या समस्याएं आईं? –

+1

कीवर्ड: शिफ्ट, मास्क और तुलना करें। '<<' or '>> 'ऑपरेटर और' & 'ऑपरेटर का उपयोग करें। समाधान के साथ आओ और फिर कठिनाइयों के दौरान प्रश्न पूछें। –

+0

यदि 8 बिट्स केवल 32 बिट int की निर्धारित स्थिति पर हो सकते हैं, तो आप सभी को और संचालन के साथ अन्य सभी को शून्य कर सकते हैं और सीधे मानों की तुलना कर सकते हैं। – Magisch

उत्तर

5

ठीक है, आप की कोशिश कर सकते ...

bool is_in(uint32_t a, uint8_t b) { 
    while (a >= b) { 
    if ((a & 0xff) == b) return true; 
    a >>= 1; 
    } 
    return false; 
} 
+1

दोनों तर्कों के लिए 'हस्ताक्षरित' का उपयोग करने के लिए उपरोक्त, अन्यथा आप – dbush

+1

दिलचस्प समाधान में स्थानांतरित हो रहे हैं, धन्यवाद :) – Johny

+1

स्पष्ट समाधान। –

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