将零和一的矩阵保存为位序列
Save a matrix of zero and one as a sequence of bits
我有一个表示为一维数组的二进制矩阵 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 和 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);
我有一个表示为一维数组的二进制矩阵 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 和 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);