Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将阵列拆分为特定长度的子阵列_C#_Linq - Fatal编程技术网

C# 将阵列拆分为特定长度的子阵列

C# 将阵列拆分为特定长度的子阵列,c#,linq,C#,Linq,我知道类似的问题被问了很多次。然而,我没有找到我需要的解决方案,我自己也找不到 我的场景:我有一个字节数组。现在我需要将它们转换为位,然后创建一个数组,该数组将包含精确的位数 我能够将它们转换为位并创建特定长度的数组,但每个索引中只有8位 我的代码示例: var blocks = byteArr.Select(byte => Convert.ToString(byte, 2).PadLeft(8, '0')) .Select((byte, i) => new { Value

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

我的场景:我有一个
字节数组
。现在我需要将它们转换为
,然后创建一个数组,该数组将包含精确的位数

我能够将它们转换为位并创建特定长度的数组,但每个索引中只有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();
它回来了。从屏幕截图上可以看出,它创建了“100字节数组”数组,但我需要的是“100位数组”数组或更好的字符串数组,其中每个字符串都有100位

感谢您的回复和帮助。

请尝试以下方法

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组。最后,您只需创建这些“字符位”的新字符串。

字节
不是有效的变量名,除非在它前面加上一个
@
,但实际上您应该选择另一个名称,在这种情况下
b
就可以了。我刚刚回答了一个类似的问题。你可以在我的答案中找到这个方法@juharr,是的,是的,我有一个字母,但在堆栈溢出问题中,我把它编辑成了字节,并没有意识到它是无效的。谢谢,我要一个look@juaharr,谢谢你的回复和链接,但似乎这并不能解决我的问题。在你的回答中,你正在将数字转换为位,但我已经有了位数组(长度为8的字符串),我只需要将它们连接起来,创建长度为100的字符串数组。很好,它工作得很好。一旦我获得15个声誉,我会投票支持:)非常感谢