c# – 重新解释将数组从string转换为int
发布时间:2020-12-15 07:44:18 所属栏目:百科 来源:网络整理
导读:我想在int数组中重新解释一个字符串,其中每个int根据处理器架构负责4或8个字符. 有没有办法以相对便宜的方式实现这一目标? 我试过这个,但似乎没有在一个int中重新解释4个字符 string text = "abcdabcdefghefgh";unsafe{ fixed( char* charPointer = text )
我想在int数组中重新解释一个字符串,其中每个int根据处理器架构负责4或8个字符.
有没有办法以相对便宜的方式实现这一目标? 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#功能.
注意,如果长度不均匀,那么现在你丢失了最后一个字符. 关于性能:你做到这一点的方式和它一样便宜. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |