重新解释将一个数组从字符串转换为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#特性。

请注意,如果长度不均匀,现在你会丢失最后一个字符。

关于表现:你做这件事的方式和它一样便宜。

链接地址: http://www.djcxy.com/p/84255.html

上一篇: reinterpret cast an array from string to int

下一篇: Aggregation with geoNear & subdocuments