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

Есть метод который конвертирует массив байтов в строку. Проблема в том что все в куче такое тяжело читать,можно форматировать стоку как на скрине сверху.
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
Ответы (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);
}
Вывод в консоль такой же.

