以下是我的文本文件
的数据示例00001000100100000011000111
我知道我的消息的前两个数字是我的字符串init =" 00" < - 总是这些数字。
我有4个数字后表示我的"消息数量"就好像我会发送"两个"消息 - > 0010二进制数。
我收到第一条消息" 24"后,代码为" 0010 0100"二进制数。
比我的第二条消息" 31",代码是" 0011 0001"但在放入这些数字之前,我必须使用" 00"。
分开最后,我的字符串结束=" 11" < - 总是这些数字
消息需要像这样分开: 00 0010 0010 0100 00 0011 0001 11
我必须阅读此文件并显示消息是什么。 " 24"和" 31"。
有人能帮助我吗?记住,对于这个例子,我只有"两个"消息,但我已经"一个"或"三"或者......
规则:如果我有超过"一个"消息,我需要使用" 00"
分开答案 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;
}