Chciałbym ponownie zinterpretować ciąg znaków w tablicy int, gdzie każdy int przejmie ładunek 4 lub 8 znaków na podstawie architektury procesora.reinterpretuj rzut tablic ze stringów na int
Czy istnieje sposób na osiągnięcie tego w stosunkowo niedrogi sposób? Starałem się to, ale nie wydaje się reinterpretacji 4 znaki w jednym 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 ]);
}
}
}
Roztwór: (zmiana Int64 lub Int32 w zależności od potrzeb)
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 ]);
}
}
}
Chary w C# mają 2 bajty, więc z wskaźnikiem Int32 otrzymasz dwa znaki na int. – Erik
Jeśli wiesz, że twoje postacie są przyjazne dla 8-bitów, możesz je wyodrębnić i wstawić cztery do każdej liczby całkowitej, ale musisz wykonać kopię danych. – yoyo
Zobacz ["Czy w tytułach powinny znaleźć się" znaczniki "?] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), gdzie konsensus jest "nie, nie powinni"! –