Формат пакета в строку

У меня есть пакет с данными мене нужно высвисти его в таком виде: введите сюда описание изображения

Есть метод который конвертирует массив байтов в строку. Проблема в том что все в куче такое тяжело читать,можно форматировать стоку как на скрине сверху.

public static string ByteArrayToString(byte[] ba)
{
    return BitConverter.ToString(ba);
}

Результат:

02-30-00-64-F1-03-11-21-03-03-07-21-58-00-00-00-00-06-41-00-06-00-00-00-00-00-00-00-00-00-00-00-00-56-24-50-5F-23-57-50-22-56-5A-56-54-62-52-59-54-4F-58-00-00-00-00-00-00-DE-DE-DE-80-80-7D-82-7B-7F-00-00-96-96-3A-39-39-00-00-00-09-0F-0F-0F-F0-0F-0F-F0-F0-F0-45-00-10-51-00-08-01-10-51-00-FF-FF-FF-3F-00-00-50-01-00-FE-47-00-01-00-01-10-50-03-00-00-00-00-00-00-00-00-00-00-00-00-00-00

Как это выглядет введите сюда описание изображения

@Andrew введите сюда описание изображения


Ответы (2 шт):

Автор решения: Andrew
using System;
using System.Linq;
                    
public class Program
{
    public static void Main()
    {
        var s = "02-30-00-64-F1-03-11-21-03-03-07-21-58-00-00-00-00-06-41-00-06-00-00-00-00-00-00-00-00-00-00-00-00-56-24-50-5F-23-57-50-22-56-5A-56-54-62-52-59-54-4F-58-00-00-00-00-00-00-DE-DE-DE-80-80-7D-82-7B-7F-00-00-96-96-3A-39-39-00-00-00-09-0F-0F-0F-F0-0F-0F-F0-F0-F0-45-00-10-51-00-08-01-10-51-00-FF-FF-FF-3F-00-00-50-01-00-FE-47-00-01-00-01-10-50-03-00-00-00-00-00-00-00-00-00-00-00-00-00-00";

        var len = 12;
        
        var list = Enumerable
                    .Range(0, s.Length/len)
                    .Select(i => s.Substring(i*len, len));
        
        s = string.Join("\n", list);

        Console.WriteLine(s);
    }
}

аутпут:

02-30-00-64-
F1-03-11-21-
03-03-07-21-
.....
→ Ссылка
Автор решения: aepot

Решение с использованием StringBuilder.

public static void Main()
{
    string str = "02-30-00-64-F1-03-11-21-03-03-07-21-58-00-00-00-00-06-41-00-06-00-00-00-00-00-00-00-00-00-00-00-00-56-24-50-5F-23-57-50-22-56-5A-56-54-62-52-59-54-4F-58-00-00-00-00-00-00-DE-DE-DE-80-80-7D-82-7B-7F-00-00-96-96-3A-39-39-00-00-00-09-0F-0F-0F-F0-0F-0F-F0-F0-F0-45-00-10-51-00-08-01-10-51-00-FF-FF-FF-3F-00-00-50-01-00-FE-47-00-01-00-01-10-50-03-00-00-00-00-00-00-00-00-00-00-00-00-00-00";
    int length = 48;

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < str.Length; i++)
    {
        sb.Append(str[i] == '-' ? ' ' : str[i]); // заменяю дефис на пробел, чтобы было удобнее читать
        if ((i + 1) % length == 0)
            sb.AppendLine();
    }

    Console.WriteLine(sb);
}
02 30 00 64 F1 03 11 21 03 03 07 21 58 00 00 00
00 06 41 00 06 00 00 00 00 00 00 00 00 00 00 00
00 56 24 50 5F 23 57 50 22 56 5A 56 54 62 52 59
54 4F 58 00 00 00 00 00 00 DE DE DE 80 80 7D 82
7B 7F 00 00 96 96 3A 39 39 00 00 00 09 0F 0F 0F
F0 0F 0F F0 F0 F0 45 00 10 51 00 08 01 10 51 00
FF FF FF 3F 00 00 50 01 00 FE 47 00 01 00 01 10
50 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00

И еще одно, не знаю насколько быстрое, но модное решение с регулярками.

public static void Main()
{
    string str = "02-30-00-64-F1-03-11-21-03-03-07-21-58-00-00-00-00-06-41-00-06-00-00-00-00-00-00-00-00-00-00-00-00-56-24-50-5F-23-57-50-22-56-5A-56-54-62-52-59-54-4F-58-00-00-00-00-00-00-DE-DE-DE-80-80-7D-82-7B-7F-00-00-96-96-3A-39-39-00-00-00-09-0F-0F-0F-F0-0F-0F-F0-F0-F0-45-00-10-51-00-08-01-10-51-00-FF-FF-FF-3F-00-00-50-01-00-FE-47-00-01-00-01-10-50-03-00-00-00-00-00-00-00-00-00-00-00-00-00-00";
    int bytesPerLine = 16;

    string result = Regex.Replace(str, @$"((?:[^-]*-){{{bytesPerLine - 1}}}[^-]*)-", $"$1{Environment.NewLine}").Replace("-", " ");

    Console.WriteLine(result);
}

Вывод в консоль такой же.

→ Ссылка