我有一个读取数据特定部分的内存流。从二进制文件我想要一个位置5-8的ReadInt32值。我如何实现这一目标:
using (var reader = new BinaryReader(stream))
{
somebyte1
somebyte2
somebyte3
//get only this value
int v = reader.ReadInt32;
}
答案 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();
}