簡體   English   中英

如何在八個字符塊中拆分字符串?

[英]How to split a string in chunks of eight chars?

我有以下二進制字符串

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));

怎么樣?

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

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();

在純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”是兩部分。 通過添加(除數-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,但最后一部分可能會更短。 它表示Min8和剩余字符數之間。

使用正則表達式可能更容易:

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

(捕獲1-8個字符的組,任何字符,然后獲取匹配並將它們放入數組中)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM