Bir dize dizisini, işlemci mimarisine bağlı olarak her 4 veya 8 karakterlik bir işlemin yapıldığı bir dizide yeniden yorumlamak istiyorum., dizeden dize olan bir diziyi yeniden yorumla
Bunu nispeten ucuz bir şekilde gerçekleştirmenin bir yolu var mı? Bu denedik ama bir 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 ]);
}
}
}
ÇÖZÜM 4 karakter reinterpret görünmüyor: Neredeyse doğru var
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 ]);
}
}
}
C# içindeki karakterler 2 bayttır, böylece Int32 işaretçisi ile int başına iki karakter elde edersiniz. – Erik
Karakterlerinizin 8-bitlik bir dostu olduğunu biliyorsanız, bunları ayıklayıp her bir tam sayıya kendiniz doldursunuz, ancak verilerin bir kopyasını almanız gerekir. – yoyo
Lütfen, ["Başlıklardaki" etiketler "etiketlerini içerir mi?"] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles) "hayır, yapmamalılar" –