Как конфертировать из типа System.string [] [] в тип System.Iconvertible? - PullRequest
1 голос
/ 27 января 2020

Я работаю в сети TCP / IP, где я получаю информацию с камеры, и мне нужно кое-что сделать, прежде чем я отправлю ее роботу через плагин.

Необработанная строка камеры, которая поступает на эту клиентскую сторону:

"0000L000000651 \ r \ n0000" "17.617889; 87.416702; 51.491058; 121.289856; +0.481 ;; 89.154221; 47.625900; 123.027390; 81.499069; +0.524 \ r \ n;

В коде я использовал единицу, если l oop (if (readByCount > 30), чтобы я не получил "0000L000000651 \ r \ n0000", так как из-за это если l oop, то я получаю только 2-ю строку, которая

"17.617889; 87.416702; 51.491058; 121.289856; +0.481 ;; 89.154221; 47.625900; 123.027390; 81.499069; +0.524 \ r \ n;

Эта строка содержит информацию о двух областях интереса (ROI), разделенных двумя точками с запятой (;;). Вот почему я использовал метод split дважды: один раз (;;) и один раз (;). До этого момента все нормально. После этого я хочу преобразовать это в массив double, и это дает мне ошибку, что тип System.string [] [] для типа System.Iconvertible

Я использовал код:

 public async void ReadDataAsync(TcpClient mClient)
    {try
        {
            StreamReader clientStreamReader = new StreamReader(mClient.GetStream());

            char [] buff = new char[1024];
            int readByCount = 0;


            while (true)
            {
                readByCount = await clientStreamReader.ReadAsync(buff, 0, buff.Length);

                Directory.CreateDirectory("Camera o3D1");

                if (readByCount <= 0)
                {
                    Console.WriteLine("Disconnected from Server.");
                    mClient.Close();
                    break;
                }
                if (readByCount > 30)
                {
                    var output = (new string(buff).TrimEnd('\u0000'));
                    Debug.WriteLine(output);


                    Debug.WriteLine(output.GetType());

                    var output1 = output.Split(new[] { ";;" }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Split(';')).ToArray();

                    Debug.WriteLine(output1);
                    foreach (var item in output1[0])
                    {
                        Debug.WriteLine(Convert.ToDouble(item));
                        Debug.WriteLine(item.GetType());
                    }




                    //JToken jsonParsed = JToken.FromObject(output1);
                    //Debug.WriteLine(jsonParsed);
                    //Debug.WriteLine(jsonParsed.GetType());



                    //foreach (var item in jsonParsed)
                    //{
                    //    Console.WriteLine(jsonParsed.);
                    //}

                }


                    //File.WriteAllLines("Camera o3D1/file.json", jsonParsed);
                    //File.AppendAllText("Camera o3D1/file.json", type);


                Array.Clear(buff, 0, buff.Length);
            }


        }
        catch (Exception excp)
        {

            Console.WriteLine(excp.ToString());
        }
    }

И получили выход:

17,644886; 87,427452; 51,513859; 121,296410; + 0,481 ;; 89,176285; 47,627792; 123,045242; 81,496758; +0,524 ;;

System.String
System.String[][]
17644886
87427452
51513859
121296410
481

Сначала я отобразил необработанную строку, затем разделил ее, а затем отобразил каждый компонент. Но это не двойное, а целое число. Я хочу, чтобы это было дважды, и я хочу 17.644886;87.427452;51.513859;121.296410;+0.481 в одном массиве, поэтому в основном я хочу массив массивов, и каждый массив должен содержать 17.644886;87.427452;51.513859;121.296410;+0.481 как элементы, где, если я получу доступ к output1[0], я должен получить [17.64,87.42, 51.51, 121.29,.48], и если я получу доступ output1[0][0], я должен получить 17.64. Как это сделать? Любые идеи?

foreach (var item in output1[0][0])
{
    Debug.WriteLine(Convert.ToDouble(item));
}

После использования foreach l oop немного по-другому, я получаю ошибку:

Неверное приведение от 'char' к ' double '

Номера не являются фиксированными. Они являются координатами, и они будут изменены каждый элемент.

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