чтение текстового файла c # и разделение по размеру - PullRequest
0 голосов
/ 08 июня 2018

Ниже приведен пример данных моего текстового файла

00001000100100000011000111

Я знаю, что первые два числа моего сообщения - это моя строка init = "00" <- всегда эти числа. </p>

после того, как у меня есть 4 числа, что означает мое «количество сообщений», например, если я отправлю «два» сообщения -> двоичное число 0010.

после того, как у меня появится первое сообщение «24», кодДвоичное число «0010 0100».

, чем у меня второе сообщение «31», код «0011 0001», но перед тем, как поставить эти числа, я должен отделиться с помощью «00».

наконец, У меня есть строка end = "11" <- всегда эти числа </p>

сообщение должно быть разделено следующим образом: 00 0010 0010 0100 00 0011 0001 11

Мне нужно прочитать этот файли покажи, что это за сообщение.«24» и «31».

Может кто-нибудь мне помочь?помня, что для этого примера у меня просто есть сообщение «два», но у меня могут быть правила «один», «три» или .....

: если у меня более одного «сообщения», мне нужноотделяется с помощью "00"

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Попробуйте этот код (я сохранил код проще, чем мог, поэтому я думаю, что он сам по себе достаточно чистый):

static void Main(string[] args)
{
    List<int> messages = new List<int>();

    int blockSize = 4;

    string binary = "00001000100100000011000111";

    int howManyMessages = BinToInt(binary.Substring(2, blockSize));
    // if there is no messages, return
    if (howManyMessages == 0) return;
    // read first message
    int firstMessage = BinToInt(binary.Substring(2 + blockSize, 2 * blockSize));
    messages.Add(firstMessage);
    // if there is just one message, we just read it, so end
    if (howManyMessages == 1) return;
    // read the rest of messages
    for (int i = 2; i <= howManyMessages; i++)
        messages.Add(BinToInt(binary.Substring(2 + blockSize + 2 * (1 + blockSize), 2 * blockSize)));

    Console.ReadKey();
}
// convert binary number in string to integer
private static int BinToInt(string bin)
{
    int result = 0;
    for (int i = 0; i < bin.Length; i++)
        result += int.Parse(bin[bin.Length - 1 - i].ToString()) * (int)Math.Pow(2, i);
    return result;
}
0 голосов
/ 08 июня 2018

загрузите их как строки, используйте метод строки substring и выберите подстроки по размеру.Тем не менее, ваше фактическое сообщение должно быть такой же длины, или вам также нужен индикатор длины, чтобы указать, когда сообщение заканчивается.Потому что 00, может быть частью фактического сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...