将数组拆分为特定长度的子数组

时间:2016-03-03 18:40:28

标签: c# linq

我知道有很多次问过类似的问题。然而,我没有找到我需要的解决方案,也无法自己找到它。

我的方案:我有bytes数组。现在我需要将它们转换为bits,然后创建包含确切位数的数组。

我能够将它们转换为位并创建特定长度的数组,但每个索引中只有8位。

我的代码示例

var blocks = byteArr.Select(byte => Convert.ToString(byte, 2).PadLeft(8, '0'))
    .Select((byte, i) => new { Value = byte, Index = i })
    .GroupBy(x => x.Index / 100)
    .Select(grp => grp.Select(x => x.Value).ToArray())
    .ToArray();

返回{{3}}。如何在屏幕截图中看到,它创建了一组100字节的数组'但我需要的是#100; 100位数组'或者更好的字符串数组,其中每个字符串都有100位。

感谢您的回复和帮助。

1 个答案:

答案 0 :(得分:2)

尝试以下

var blocks = byteArr.SelectMany(myByte => Convert.ToString(myByte , 2).PadLeft(8, '0'))
    .Select((bit, i) => new { Bit = bit, Index = i })
    .GroupBy(x => x.Index / 100)
    .Select(grp => new string(grp.Select(x => x.Bit).ToArray()))
    .ToArray();

SelectMany会将二进制字符串分解为各个字符,然后您将按索引将它们分组为100。最后,您只需创建那些“char bits”的新字符串。