4

我有以下二进制字符串

string binaryString = "110011100110011011001110011001101100111001100110110011100110011011001110001001100110011011001110";

现在我想把上面的字符串分成 8 个字符的组。例如。

11001110 11001110 11001110 11001110 11001110 11001110 

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

var binary = binaryString.Where((x, y) => y % 8 == 0).ToList();
4

4 回答 4

11

试试这个:

IEnumerable<string> groups =  Enumerable.Range(0, binaryString.Length / 8)
                                        .Select(i => binaryString.Substring(i * 8, 8));
于 2013-08-19T06:58:59.307 回答
3

喜欢怎么样?

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

这里有一个DEMO

于 2013-08-19T07:02:59.690 回答
1
List<string> bytes = binaryString.Select((c, i) => new { c, i })
                        .GroupBy(x => x.i / 8)
                        .Select(x => String.Join("",x.Select(y => y.c)))
                        .ToList();
于 2013-08-19T07:00:21.473 回答
1

在纯 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" 

将返回 12345678、1234567

(binaryString.Length + 7) / 8)

这是我们将拥有的零件数量。我们必须清楚地四舍五入,所以“0”是一个部分,“123456781”是两个部分。通过添加 (divisor - 1) 我们四舍五入。

Enumerable.Range(0, (binaryString.Length + 7) / 8)

这将给出一系列数字 0, 1, 2, # of parts - 1

.Select(p => 

选择:-)

binaryString.Substring(p * 8, Math.Min(8, binaryString.Length - (p * 8))))

子串

p * 8

起点,零件编号* 8,(所以零件#0从0开始,零件#1从8开始......)

Math.Min(8, binaryString.Length - (p * 8)))

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

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

var parts2 = Regex.Matches(binaryString, ".{1,8}")
                  .OfType<Match>()
                  .Select(p => p.ToString())
                  .ToArray();

(捕获 1-8 个字符的组,任何字符,然后将匹配项放入数组中)

于 2013-08-19T07:02:57.167 回答