【问题标题】:Save a matrix of zero and one as a sequence of bits将零和一的矩阵保存为位序列
【发布时间】:2020-06-14 01:52:41
【问题描述】:

我有一个二进制矩阵 8x8 表示为一维数组

byte[] m = { 0, 1, 1, 1, 1, 0, 0, 1,
             1, 1, 1, 1, 1, 0, 0, 1,
             0, 1, 1, 1, 1, 0, 0, 1,
             1, 1, 1, 1, 0, 0, 0, 1,
             0, 1, 1, 0, 1, 0, 0, 1,
             0, 1, 1, 1, 1, 0, 0, 1,
             1, 1, 1, 1, 1, 0, 0, 1,
             1, 1, 1, 1, 1, 0, 0, 1 };

有没有办法将它保存到总大小为 8 字节的二进制文件中?每个 0 和 1 零都是 1 位大小。

【问题讨论】:

  • 位是否需要按特定顺序进入字节?例如,这里的第一个 0 应该进入第一个字节的最高位,还是进入最低位?两种方式都可以吗?

标签: c# arrays matrix binary compression


【解决方案1】:

您可以使用以下函数将0和1的数组压缩为字节数组:

IEnumerable<byte> Compress(byte[] a)
{
    for (var i = 0; i < a.Length / 8f; i++)
    {
        var slice = a.Skip(i * 8).Take(8);
        byte b = 0;
        foreach (var s in slice)
        {
            b <<= 1;
            if (s == 1)
                b |= 1;
        }
        yield return b;
    }
}

然后使用File.WriteAllBytes保存到文件。

例如:

var result = Compress(m).ToArray();
File.WriteAllBytes(@"d:\test.bin", result);

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 2021-11-13
    • 1970-01-01
    • 2015-11-17
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    相关资源
    最近更新 更多