Я работаю в сети 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 '
Номера не являются фиксированными. Они являются координатами, и они будут изменены каждый элемент.