读取文本文件c#并按大小分隔

时间:2018-06-08 05:14:04

标签: c# file text size delimited-text

以下是我的文本文件

的数据示例

00001000100100000011000111

我知道我的消息的前两个数字是我的字符串init =" 00" < - 总是这些数字。

我有4个数字后表示我的"消息数量"就好像我会发送"两个"消息 - > 0010二进制数。

我收到第一条消息" 24"后,代码为" 0010 0100"二进制数。

比我的第二条消息" 31",代码是" 0011 0001"但在放入这些数字之前,我必须使用" 00"。

分开

最后,我的字符串结束=" 11" < - 总是这些数字

消息需要像这样分开: 00 0010 0010 0100 00 0011 0001 11

我必须阅读此文件并显示消息是什么。 " 24"和" 31"。

有人能帮助我吗?记住,对于这个例子,我只有"两个"消息,但我已经"一个"或"三"或者......

规则:如果我有超过"一个"消息,我需要使用" 00"

分开

2 个答案:

答案 0 :(得分:0)

将它们作为字符串加载,使用子字符串字符串方法,并按大小获取子字符串。但是,实际消息必须与lenth相同,或者还需要长度指示符,以指定消息何时结束。因为00,可能是实际消息的一部分。

答案 1 :(得分:0)

试试这段代码(我尽可能简化代码,所以我认为它本身就足够干净了):

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