【问题标题】:How to point to the particular index of BinaryStream?如何指向 BinaryStream 的特定索引?
【发布时间】:2014-08-02 14:06:39
【问题描述】:

我有一个由 32 个字节组成的字节数组。 我想从索引位置 16 到 19 读取 4 个字节。 我如何指向二进制阅读器从索引 16 开始阅读。 我正在尝试这些命令

byte[] trace ; // 32 byte array
using (FileStream s = File.OpenRead(filename))
using (BinaryReader r = new BinaryReader(s))
 {
   r.baseStream.Seek(position,SeekOrigin.Begin);
   byte[] by = r.ReadBytes(4);
 }

但我不知道该放什么位置?

【问题讨论】:

  • 没有。我不想从第 16 个文件索引开始阅读。我想在我已经从文件中提取的数组的第 16 个索引处读取
  • 但是您只从数组by 中的文件中读取了4 个字节。数组中的元素不是 16 个,而是 4 个,索引从 0 到 3。
  • 我认为你的例子是错误的。您有长度为 32 的字节数组 trace,您需要读取从字节 16 开始的 4 个字节。对吧?
  • "我想在我已经从文件中提取的数组的第 16 个索引处读取"。请真的非常非常清楚地提出您的问题:您的问题是关于从 BinaryStream 读取数据,还是您的问题是您不知道如何使用/如何访问数组元素?
  • 我说的是 byte[] 跟踪。它包含 32 个元素。现在我想读取 16 到 19 的 4 个元素

标签: c# arrays binaryreader


【解决方案1】:

我想我明白了(尽管您在问题中的示例不是很清楚)。

你有一个字节数组trace,其中有 32 个元素,你想读取从位置 16 开始的 4 个字节。

假设字节序不是一个变量,你可以使用它来读取 4 个字节作为 int 值或字节数组:

using(var memStream = new MemoryStream(trace)) 
{
  //position the stream
  using(var reader = new BinaryReader(memStream)
  {
    memStream.Seek(16, SeekOrigin.Begin);
    var intValue = reader.ReadInt32();

    memStream.Seek(16, SeekOrigin.Begin);
    //now read a byte array
    var byteArray = reader.ReadBytes(4);
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-25
    • 2021-08-17
    • 2020-09-02
    • 2019-01-11
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多