11

我使用以下代码来读取 BigEndian 信息,BinaryReader但我不确定这是否是有效的方法。有没有更好的解决方案?

这是我的代码:

// some code to initialize the stream value
// set the length value to the Int32 size
BinaryReader reader =new BinaryReader(stream);
byte[] bytes = reader.ReadBytes(length);
Array.Reverse(bytes);
int result = System.BitConverter.ToInt32(temp, 0);
4

3 回答 3

12

BitConverter.ToInt32首先不是很快。我会简单地使用

public static int ToInt32BigEndian(byte[] buf, int i)
{
  return (buf[i]<<24) | (buf[i+1]<<16) | (buf[i+2]<<8) | buf[i+3];
}

您也可以考虑一次读取超过 4 个字节。

于 2013-01-18T14:46:25.123 回答
2

截至 2019 年(实际上,从 .net core 2.1 开始),现在有

byte[] buffer = ...;

BinaryPrimitives.ReadInt32BigEndian(buffer.AsSpan());

文档

执行

于 2019-12-05T16:14:31.347 回答
1

您可以使用IPAddress.NetworkToHostOrder,但我不知道它是否真的更有效。您必须对其进行概要分析。

于 2013-01-18T14:45:35.130 回答