Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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,我有以下二进制字符串 string binaryString = "110011100110011011001110011001101100111001100110110011100110011011001110001001100110011011001110"; 现在我想把上面的字符串分成一组8个字符。例如 11001110 11001110 11001110 11001110 11001110 11001110 我尝试了以下代码,但没有得到预期的结果 var binary = bina

我有以下二进制字符串

string binaryString = "110011100110011011001110011001101100111001100110110011100110011011001110001001100110011011001110";
现在我想把上面的字符串分成一组8个字符。例如

11001110 11001110 11001110 11001110 11001110 11001110 
我尝试了以下代码,但没有得到预期的结果

var binary = binaryString.Where((x, y) => y % 8 == 0).ToList();
试试这个:

IEnumerable<string> groups =  Enumerable.Range(0, binaryString.Length / 8)
                                        .Select(i => binaryString.Substring(i * 8, 8));
IEnumerable groups=Enumerable.Range(0,binaryString.Length/8)
.Select(i=>binaryString.Substring(i*8,8));
List bytes=binaryString.Select((c,i)=>new{c,i})
.GroupBy(x=>x.i/8)
.Select(x=>String.Join(“,x.Select(y=>y.c)))
.ToList();

在纯LINQ中是这样的:

var parts = Enumerable.Range(0, (binaryString.Length + 7) / 8)
                      .Select(p => binaryString.Substring(p * 8, Math.Min(8, binaryString.Length - (p * 8))))
                      .ToArray();
它非常复杂,因为它能够“解析”小于8个字符的范围。因此:

string binaryString = "123456781234567" 
将返回123456781234567

(binaryString.Length + 7) / 8)
这是我们将拥有的零件数量。我们必须清楚地总结,所以“0”是一个部分,“123456781”是两个部分。通过加法(除数-1),我们将四舍五入

Enumerable.Range(0, (binaryString.Length + 7) / 8)
这将给出一系列数字0、1、2、#的部分-1

.Select(p => 
选择:-)

子串

p * 8
起始点,零件号*8,(因此零件#0从0开始,零件#1从8开始…)

通常是8,但最后一部分可能更短。它表示
8
和剩余字符数之间的
Min

使用正则表达式可能更容易:

var parts2 = Regex.Matches(binaryString, ".{1,8}")
                  .OfType<Match>()
                  .Select(p => p.ToString())
                  .ToArray();
var parts2=Regex.Matches(二进制字符串,“.{1,8}”)
第()类
.Select(p=>p.ToString())
.ToArray();
(捕获由1-8个字符组成的组,任意字符,然后获取匹配项并将其放入数组)

like怎么样

string binaryString = "110011100110011011001110011001101100111001100110110011100110011011001110001001100110011011001110";
int step = binaryString.Length / 8;
for (int i = 0; i < step; i++)
{
    Console.WriteLine(binaryString.Substring(i, 8));
}

这里有一个。

这不太适合使用
LINQ
,只需一个for循环就足够了。请注意,如果它不是8个字符的精确倍数,这将删除最后一个块-但是:看起来很好,除此之外,当然只有当字符串长度是8@SonerGönül我很高兴帮助你:)
Math.Min(8, binaryString.Length - (p * 8)))
var parts2 = Regex.Matches(binaryString, ".{1,8}")
                  .OfType<Match>()
                  .Select(p => p.ToString())
                  .ToArray();
string binaryString = "110011100110011011001110011001101100111001100110110011100110011011001110001001100110011011001110";
int step = binaryString.Length / 8;
for (int i = 0; i < step; i++)
{
    Console.WriteLine(binaryString.Substring(i, 8));
}
11001110
10011100
00111001
01110011
11100110
11001100
10011001
00110011
01100110
11001101
10011011
00110110