2015-03-24 7 views
7

से एक सरणी डाली गई है, मैं प्रोसेसर आर्किटेक्चर के आधार पर 4 या 8 वर्णों के प्रत्येक int चार्ज लेते हुए int की एक सरणी में एक स्ट्रिंग को दोबारा परिभाषित करना चाहता हूं।पुनर्नवीनीकरण स्ट्रिंग से int

क्या यह अपेक्षाकृत सस्ती तरीके से हासिल करने का कोई तरीका है? मैं इस बाहर की कोशिश की लेकिन एक पूर्णांक

string text = "abcdabcdefghefgh"; 

unsafe 
{ 
    fixed(char* charPointer = text) 
    { 
     Int32* intPointer = (Int32*)charPointer; 

     for(int index = 0; index < text.Length/4; index++) 
     { 
      Console.WriteLine(intPointer[ index ]); 
     } 
    } 
} 

समाधान में 4 वर्ण पुनर्व्याख्या प्रतीत नहीं होता है: (अपनी आवश्यकताओं के आधार परिवर्तन Int64 या Int32)

string text = "abcdabcdefghefgh"; 

unsafe 
{ 
    fixed(char* charPointer = text) 
    { 
      Int64* intPointer = (Int64*)charPointer; 
      int conversionFactor = sizeof(Int64)/sizeof(char); 

      int index = 0; 
      for(index = 0; index < text.Length/conversionFactor; index++) 
      { 
       Console.WriteLine(intPointer[ index ]); 
      } 

      if(text.Length % conversionFactor != 0) 
      { 
       intPointer[ index ] <<= sizeof(Int64); 
       intPointer[ index ] >>= sizeof(Int64); 

       Console.WriteLine(intPointer[ index ]); 
      } 
    } 
} 
+5

सी # में वर्ण 2 बाइट हैं, इसलिए एक इंट 32 पॉइंटर के साथ आपको दो अक्षर प्रति int प्राप्त करने जा रहे हैं। – Erik

+0

यदि आप जानते हैं कि आपके पात्र 8-बिट अनुकूल हैं तो आप उन्हें निकाल सकते हैं और चार को प्रत्येक पूर्णांक में स्वयं भर सकते हैं, लेकिन आपको डेटा की एक प्रति बनाना होगा। – yoyo

+0

कृपया देखें ["प्रश्नों में उनके शीर्षक में" टैग "शामिल होना चाहिए?"] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), जहां सर्वसम्मति "नहीं, उन्हें नहीं करना चाहिए"! –

उत्तर

4

आप लगभग यह अधिकार मिल गया। sizeof(char) == 2 && sizeof(int) == 4। लूप रूपांतरण कारक 2 होना चाहिए, 4 नहीं। यह sizeof(int)/sizeof(char) है। यदि आपको यह शैली पसंद है तो आप इस सटीक अभिव्यक्ति का उपयोग कर सकते हैं। sizeof एक छोटी सी सी # सुविधा है।

नोट, अगर लंबाई भी नहीं है तो अभी आप अंतिम चरित्र खो देते हैं।

प्रदर्शन के बारे में: जिस तरह से आपने इसे किया है उतना ही सस्ता है जितना यह मिलता है।

+0

अंतिम चार को सुरक्षित रूप से कैसे पढ़ा जाए? – sam

+0

मैं इसे सीधे स्ट्रिंग से पढ़ता हूं। – usr

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