C#Big-endian ulong来自4个字节

Wes*_*eyE 13 c# integer endianness

我试图在C#中将一个4字节数组转换为ulong.我目前正在使用此代码:

atomSize = BitConverter.ToUInt32(buffer, 0);
Run Code Online (Sandbox Code Playgroud)

字节[4]包含:

0 0 0 32

但是,字节是Big-Endian.有没有一种简单的方法可以将这个Big-Endian ulong转换为Little-Endian ulong?

Mar*_*ers 19

我相信Jon Skeet的MiscUtil库(nuget链接)中的EndianBitConverter可以做你想要的.

您还可以使用位移操作来交换位:

uint swapEndianness(uint x)
{
    return ((x & 0x000000ff) << 24) +  // First byte
           ((x & 0x0000ff00) << 8) +   // Second byte
           ((x & 0x00ff0000) >> 8) +   // Third byte
           ((x & 0xff000000) >> 24);   // Fourth byte
}
Run Code Online (Sandbox Code Playgroud)

用法:

atomSize = BitConverter.ToUInt32(buffer, 0);
atomSize = swapEndianness(atomSize);
Run Code Online (Sandbox Code Playgroud)


Mar*_*k H 7

System.Net.IPAddress.NetworkToHostOrder(atomSize); 会翻转你的字节.

  • 不必要.如果您的主机已经是big-endian,则不会进行任何更改. (2认同)

cub*_*e45 7

在 .net core (>= 2.1) 中,您可以改用它:

BinaryPrimitives.ReadUInt32BigEndian(buffer);
Run Code Online (Sandbox Code Playgroud)

这样,您就可以确定正在读取的字节序。

文档

它在那里实施,以防您想知道它是如何工作的


Cal*_*ers 5

我推荐使用Mono'sDataConvert,就像BitConverter使用类固醇一样.它允许您直接读取大端字节数组并大量改进BitConverter.

此处提供了与源的直接链接.