我正在尝试从串行端口读取数据并通过 ac# GUI 将其存储在 .csv 文件中。我的数据包格式如下所示:
头字节 | 长度 | 类型 | 数据 | 尾字节
所以有两种数据
头字节 | 长度 | A型 | 来自传感器 1 的数据(2 字节)| 来自传感器 2 的数据(2 字节)| 来自传感器 3 的数据(2 字节)| 来自传感器 4 的数据(2 字节)| 来自传感器 5 的数据(2 字节)| 来自传感器 1 的数据(2 个字节)………….等等(直到达到数据包长度) | 尾字节
另一种类型有格式
头字节 | 长度 | B型| 来自 Accelerometer1 x(1 字节)| 的数据 来自 Accelerometer1y 的数据(1 字节)| 来自 Accelerometer1z 的数据(1 字节)| 来自 Accelerometer2 x(1 字节)| 的数据 来自 Accelerometer2y 的数据(1 字节)| 来自 Accelerometer2z 的数据(1 字节)| 来自 Accelerometer3 x(1 字节)| 的数据 来自 Accelerometer3y 的数据(1 字节)| 来自 Accelerometer3z 的数据(1 字节)| 来自 Accelerometer1x(1 字节) 的数据………….等等(直到达到数据包长度) | 尾字节
现在的问题是将它们中的每一个存储在不同列中的 csv 文件中,例如
Col1(来自传感器 1 的数据)|Col2(来自传感器 2 的数据)|Col3(来自传感器 3 的数据)|Col4(来自传感器 4 的数据)|Col5(来自传感器 5 的数据)|Col6(来自 Accelerometer1x 的数据)| Col7(来自 Accelerometer1y 的数据)| Col8(来自 Accelerometer1z 的数据)| Col9(来自 Accelerometer2x 的数据)| Col10(来自 Accelerometer2y 的数据)| Col11(来自 Accelerometer2z 的数据)| Col12(来自 Accelerometer3x 的数据)| Col13(来自 Accelerometer3y 的数据)| Col14(来自 Accelerometer3z 的数据)|
Col1(来自传感器 1 的数据的下一个数据)|Col2(来自传感器 2 的数据的下一个数据)|Col3(来自传感器 3 的数据的下一个数据)|Col4(来自传感器 4 的数据的下一个数据)|Col5(来自数据的下一个数据来自传感器 5)|Col6(来自 Accelerometer1x 的数据的下一个数据)| Col7(来自 Accelerometer1y 的数据的下一个数据)| Col8(来自 Accelerometer1z 的数据的下一个数据)| Col9(来自 Accelerometer2x 的数据的下一个数据)| Col10(来自 Accelerometer2y 数据的下一个数据)| Col11(来自 Accelerometer2z 的数据的下一个数据)| Col12(来自 Accelerometer3x 数据的下一个数据)| Col13(来自 Accelerometer3y 的数据的下一个数据)| Col14(来自 Accelerometer3z 的数据)等等……
所以我现在只尝试为 A 类型做这件事,如下所示:我定义了一个列表和一个数组
List<char> list_data = new List<char>();
然后我在下面的函数中从数据包中提取数据并存储它。
private string bytearraytohexstring(byte[] data)
{foreach (byte b in data){
//extract data.....
list_data.Add(Convert.ToChar(b));
list_data.Add('*');
}
}
所以现在我在列表中的数据如下 Data1 * data2 * data3 * data4 * data5 * data1 * 等等当我单击 GUI 中的保存按钮时
char[] store_array = new char[list_data.Count - 1];
store_array = list_data.ToArray();
string filePath = @"D:\data\test_no_8.csv";
StringBuilder sb = new StringBuilder();
string char_array_to_str = new string(store_array);
string[] spilt_value = char_array_to_str.Split('*');
for (int index = 0; index < spilt_value.Length-1; index++)
sb.AppendLine(spilt_value[index]);
File.WriteAllText(filePath, sb.ToString());
顺便说一句,我已经编程了,你一定明白我对这个领域是完全陌生的! 不出所料,我收到的垃圾数据全部存储在一个列中。我只想知道我可以使用哪些可能的方法以及我在哪里犯了错误。在此先感谢您的帮助。