c# - 如何从 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”的无效转换
数字不是固定的。它们是坐标,每个项目都会更改。
解决方案
推荐阅读
- python - 熊猫 read_fwf
- node.js - CircleCI忘记机器执行器上的节点版本
- sql - How to add unique identifier column in table?
- javascript - 验证 JWT 令牌的问题
- javascript - 如何使用 puppeteer 为模拟设备执行拖动缩放
- excel - InputBox 将 Decimal 条目与字符串混淆
- python - 使用单行循环两个字典来创建列表
- unit-testing - 使用和 Mocha 模拟 vuex 动作
- sql-server - How to get records which has more than one entries on another table
- c# - 尝试从 .NET Framework 移植现有的依赖于 powershell 的类库