![](/img/trans.png)
[英]Remove non numeric characters from string and cast numbers as an int into an array
[英]reinterpret cast an array from string to int
我想在int数组中重新解释一个字符串,其中每个int根据处理器架构负责4或8个字符。
有没有办法以相对便宜的方式实现这一目标? 我试过这个,但似乎没有在一个int中重新解释4个字符
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 ] );
}
}
}
解决方案:(根据您的需要更改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 ] );
}
}
}
你几乎做对了。 sizeof(char) == 2 && sizeof(int) == 4
。 循环转换因子必须是2,而不是4.它是sizeof(int) / sizeof(char)
。 如果你喜欢这种风格,你可以使用这个确切的表达。 sizeof
是一个鲜为人知的C#功能。
请注意,如果长度不均匀,您现在会丢失最后一个字符。
关于性能:您完成它的方式就像它获得的那样便宜。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.