在特定位置从二进制读取Int32

时间:2017-11-15 19:06:09

标签: c# binary memorystream

我有一个读取数据特定部分的内存流。从二进制文件我想要一个位置5-8的ReadInt32值。我如何实现这一目标:

using (var reader = new BinaryReader(stream))
{

  somebyte1
  somebyte2
  somebyte3

  //get only this value
  int v = reader.ReadInt32;

}

2 个答案:

答案 0 :(得分:0)

将基本流移动到您想要读取的位置:

stream.Seek(4, SeekOrigin.Begin);

using (var reader = new BinaryReader(stream))
{
    int v = reader.ReadInt32;
}

答案 1 :(得分:0)

在.NET中,有可搜索的流类型和不允许搜索的类型。这由CanSeek属性指示。如果你的流允许搜索(和MemoryStream一样),你可以只移动当前位置并读取数据。如果流不允许搜索,您唯一的选择是读取并丢弃数据,直到到达所需数据所在的流位置。所以你问题的通用解决方案是:

const int targetPosition = 4;
BinaryReader reader = new BinaryReader(stream);
using (reader) {
    if (stream.CanSeek) {
        stream.Position = targetPosition;
    }
    else {
        reader.ReadBytes(targetPosition);
    }
    int result = reader.ReadInt32();
}