से एक सरणी डाली गई है, मैं प्रोसेसर आर्किटेक्चर के आधार पर 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 ]);
}
}
}
सी # में वर्ण 2 बाइट हैं, इसलिए एक इंट 32 पॉइंटर के साथ आपको दो अक्षर प्रति int प्राप्त करने जा रहे हैं। – Erik
यदि आप जानते हैं कि आपके पात्र 8-बिट अनुकूल हैं तो आप उन्हें निकाल सकते हैं और चार को प्रत्येक पूर्णांक में स्वयं भर सकते हैं, लेकिन आपको डेटा की एक प्रति बनाना होगा। – yoyo
कृपया देखें ["प्रश्नों में उनके शीर्षक में" टैग "शामिल होना चाहिए?"] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), जहां सर्वसम्मति "नहीं, उन्हें नहीं करना चाहिए"! –