首页 > 解决方案 > 如何从 System.string [][] 类型转换为 System.Iconvertible 类型?

问题描述

我正在研究 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;

在代码中,我使用了一个 if 循环(if (readByCount > 30),这样我就不会得到“0000L000000651\r\n0000”,所以由于这个 if 循环,我只得到了第二个字符串

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

此字符串包含由两个分号 (;;) 分隔的两个感兴趣区域 (ROI) 的信息。这就是我使用 split 方法两次的原因,一次是 (;;),一次是 (;)。到此为止,一切都很好。在那之后,我想将其转换为双精度数组,它给了我一个错误,将 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在稍微不同地使用循环后,我得到一个错误:

从“char”到“double”的无效转换

数字不是固定的。它们是坐标,每个项目都会更改。

标签: c#tcp

解决方案


推荐阅读