从字节数组中解包整数的惯用c#是什么?

Joh*_*ely 1 c# parsing

我正在解析二进制文件格式.它以一种自然适合c#的uint类型的方式使用四个字节对整数进行编码.

实现此功能的最多C#/惯用方法是什么:

uint ReadUint(byte[] buffer);
Run Code Online (Sandbox Code Playgroud)

假设缓冲区包含4个元素.完整的答案可能会考虑文件中由小/大端假设引起的一些常见字节排序,并记录它选择解析的一个或多个.

Mar*_*ell 5

最基本的(但有点危险的re endianness)是:

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

除了比特移位很好(根据你自己的回复) - 或者你可以处理翻译的MiscUtil中使用Jon的EndianBitConverter.

(编辑)

我在protobuf-net中使用的little-endian位移版本与你的版本非常相似 - 我只是按升序读取它们并使用按位(不是数字)加法:

return ((uint)buffer[0])
        | (((uint)buffer[1]) << 8)
        | (((uint)buffer[2]) << 16)
        | (((uint)buffer[3]) << 24);
Run Code Online (Sandbox Code Playgroud)