【问题标题】:Read file and convert it to BitArray读取文件并将其转换为 BitArray
【发布时间】:2014-09-16 08:50:34
【问题描述】:

我有以下问题。当我逐字节读取文件并将信息存储在 BitArray 中时。以下 BitArray 没有文件的真正二进制表示。

这是我的函数,它读取文件并将其转换为 BitArray:

public BitArray Read(string fileName){
        byte[] data;
        using (Stream fs = File.OpenRead(fileName)) {
            data = new byte[fs.Length];
            fs.Read(data, 0, data.Length);
        }
        BitArray bitmap = new BitArray (data);
        return bitmap;
    }

【问题讨论】:

  • 为什么不使用File.ReadAllBytes(),它返回一个字节数组,然后将数组转换为bitArray?
  • 有什么区别?
  • Erik 谢谢你的提议。它很有用,可以节省一些行,但不能解决我遇到的问题:)
  • 除非您的 Read 方法抛出异常,否则 BitArray 应该 包含文件的真正二进制表示。作为位数组的内容,你到底遇到了什么?
  • 十六进制代码的发明是为了减轻我们阅读 000111000111011 的负担

标签: c# io bitarray


【解决方案1】:

您的问题是 BitArray 首先按最低有效位迭代字节,因为它是一个位数组。

this example on MSDN看myBA3位数组的输出。您可以在采用字节数组的 BitArray 构造函数 MSDN article 中找到更多信息。

请注意 BitArray 的 ctor 中的注释采用字节数组。你会看到它说:每个字节的最低有效位代表最低索引值这意味着如果你添加一个字节数组 [0x01,0x80] 迭代位数组将导致 1000 0000 0000 0001,与每个字节中位的表示完全相反。

【讨论】:

  • 它并不是说它首先按最低有效位存储字节。如果我有大小为 2 个字节的文件。 byte[0] 应该被 BitArray[0] 到 BitArray[7] 和 byte[1] 从 [8] 到 [15] 覆盖。
  • 请看myBA3的例子中数字4是如何存储的。此外,您自己的示例每个字节都反向存储。
  • 大声笑你是对的,它们是反向存储的......这就是整个问题。谢谢!我应该想出聪明的方法来恢复它们。在上传 BitArray 时更好...
  • 如果我的回答能帮助您解决问题,请考虑将其标记为已接受。如果您需要更多帮助,请发表评论,我会修改我的答案。
  • 嗯,我认为它们是反向打印的,因为 PrintValues 例程就是这样做的:它反向打印存储颠倒的,
猜你喜欢
  • 2016-03-11
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 2021-05-20
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多