How to do a string compare with the incoming message

后端 未结 1 438
[愿得一人]
[愿得一人] 2021-01-24 19:36

I know it sounds simple but I got some trouble with it. I am trying to make a system with a pic Microcontroller (MCU) and an xamarin android app. The sending part from app to th

1条回答
  •  后悔当初
    2021-01-24 20:22

    I found a solution for the problem I was facing. So I will share my answer and thought process so perhaps other people can use the same.

    So what I thought was there is a receiving buffer that saves the incoming char's. If the buffer is read with streamReader.Read it returns an integer of the readed char's. So I made second buffer of the datatype string[].

    If the string[0] is empty I would place in my first Char that was read by the streamReader.Read. If the string[0] is NOT empty it means that the first char is already been read so I put the incoming char into string[1]. This means that the message that was split up is now into string[0] and string[1]. So what if I could combine it and save it into a string variable. This was done by: string eindtekst = string.Join("", buf); and this gives me the string in one piece so I can compare it. It is importent to clear the both array's as you're done with the comparing otherwise there would be new data added. And as you perhaps can tell string[0] == null would never be true. So only string[1] get's overridden al the time and that means you're losing out on data.

    public void beginListenForData()
        {
            try
            {
                inStream = btSocket.InputStream;
                streamReader = new StreamReader(inStream);
            }
            catch (IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
            char[] buffer = new char[256];
            string[] buf = new string[2];
            int bytes;
            while (1)
            {
                try
                {
                    if ((bytes = streamReader.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        string tekst = new string(buffer, 0, bytes);
                        if(buf[0] == null)
                        {
                            buf[0] = tekst;
                        }
                        else
                        {
                            buf[1] = tekst; 
                        }
                        string eindtekst = string.Join("", buf);
    
                        if (eindtekst == "D0O")
                        {
                            System.Diagnostics.Debug.WriteLine("Vergelijking gelukt!");
                            System.Diagnostics.Debug.WriteLine(eindtekst);
                            Array.Clear(buffer, 0, buffer.Length);
                            Array.Clear(buf, 0, buf.Length);
                            writeData("D2O");
                        }
    
                        streamReader.DiscardBufferedData();
    
                    }
                }
                catch (Java.IO.IOException)
                {
                    break;
                }
            }
        }
    

    Thanks for all the help

    0 讨论(0)
提交回复
热议问题