允许我选择字节序的BlockCopy替代方法

5

假设我有一个字节数组:

byte[] input = { 0xFF, 0xFc, 0x00, 0x00 }

您可以使用Buffer.BlockCopy将字节从一个数组复制到另一个数组,而不考虑类型。 因此,我可以这样做:

uint[] output = new uint[1];
Buffer.BlockCopy(input , 0, output, 0, input.Length);

这将把输入的字节复制到输出中,并在此过程中将它们从字节数组转换为uint数组。
问题在于,BlockCopy使用little endianness解释这些字节。我需要一个使用big endianness的拷贝。所以,与我需要的uint值4294705152(0xFFFC0000)相比,我得到了值64767(0x0000FCFF)。请注意,这只是一个简单的例子,我无法轻易地颠倒我的实际应用程序中的字节顺序。
有没有像BlockCopy一样方便快捷,并包括我所需的设置endianness的方法?

需要注意的是,BlockCopy 的字节序是系统相关的,它不一定将字节解释为小端序,这通常发生在基于 Windows 的系统上。(来自 Microsoft 文档 https://learn.microsoft.com/en-us/dotnet/api/system.buffer.blockcopy?view=netframework-4.8):“...访问数组元素 -49 的哪个字节取决于执行应用程序的计算机的字节序...”。 - shelbypereira
1个回答

3

1
是的,我希望有一种超级秘密的黑客方法可以在不使用BitConverter的情况下完成它。这会导致严重的速度损失,而且我有很多需要处理的数据。 - jpreed00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接