Mi piacerebbe reinterpretare una stringa in una matrice di int in cui ogni int si occupa di 4 o 8 caratteri in base all'architettura del processore.reinterpretare cast da una stringa a int
C'è un modo per ottenere questo in modo relativamente economico? Ho provato questo, ma non sembra reinterpretare 4 caratteri in un 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 ]);
}
}
}
SOLUZIONE: (modifica Int64 o Int32 in base alle esigenze)
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 ]);
}
}
}
I caratteri in C# sono 2 byte, quindi con un puntatore Int32 otterrete due caratteri per int. – Erik
Se sai che i tuoi personaggi sono amichevoli a 8 bit, puoi estrarli da soli e inserire quattro in ogni numero intero, ma dovresti fare una copia dei dati. – yoyo
Si prega di vedere ["Le domande dovrebbero includere" tag "nei loro titoli?"] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), dove il consenso è "no, non dovrebbero"! –