如何将byte数组转为UInt32数组?假设在C++中我得到了这样的代码。void*targetuint32*decPacket=(uint32*)target;所以在C#中它就像...byte[]target;UInt32[]decPacket=(UInt32[])目标;无法将byte[]转换为uint[]如何将C++的数组内存对齐方式转换为C#?嗯,最接近的是使用Buffer.BlockCopy:uint[]decoded=newuint[target.Length/4];Buffer.BlockCopy(target,0,decoded,0,target.Length);请注意,无论您要复制什么类型,BlockCopy的最后一个参数始终是要复制的字节数。您不能只将字节数组视为C#中的uint数组(至少不是在安全代码中;我不知道在不安全的代码中)——但是Buffer.BlockCopy会将字节数组的内容展开到uint数组中……根据系统字节顺序确定结果。就我个人而言,我不喜欢这种方法——当您转移到具有不同内存布局的系统时,它会使代码容易出错。我更愿意明确表示我的同意。希望它可以帮助你在这种情况下。如果你愿意转向黑暗面,你可以吃蛋糕吃它(避免分配)并吃它(避免迭代)。查看我对相关问题的回答,我在其中演示了如何将float[]转换为byte[],反之亦然:Whatisthefastestwaytoconvertfloat[]tobyte[]?正如Jon所说,Buffer.BlockCopy在复制方面做得很好。但是,如果这是一个互操作场景并且您想直接访问字节数组作为uint[],最接近C++的方法是使用不安全的代码:byte[]target;CallInteropMethod(参考目标);fixed(byte*t=target){uint*decPacket=(uint*)t;//你可以像在C++中一样在这里使用decPacket}我个人更喜欢制作一个副本,但如果你需要避免实际复制数据,这确实会让你工作(在不安全的环境中)。您可以使用Buffer.BlockCopy。Array.Copy不是Array.Copy,BlockCopy执行字节级复制而不检查数组类型是否完全兼容。像这样:uint[]array=newuint[bytes.Length/4];Buffer.BlockCopy(bytes,0,array,0,bytes.Length);遍历所有数组项并调用Convert.ToUint32()。这里:Uint32[]res=newUint32[target.Length];for(inti=0;i这里是MSDN的官方链接http://msdn.microsoft.com/en-us/library/469cwstk.aspx上面是C#学习教程:HowtoconvertabytearraytoaUInt32array?分享的所有内容,如果对大家有用还需要进一步了解C#学习教程,希望大家多多关注---本文收集自网络,不代表站队,如有涉及侵权,请点击维权联系管理员删除,如需转载请注明出处:
