c# 将 COMport 数据保存到文件
c# saving COMport data to file
我正在尝试通过 UART 将浮点数据从 STM32 板发送到计算机。
我通过 UART 以 4 帧的形式发送浮点数据 - 4x8bits。我已经制作了一个将这些帧转换回浮点数的函数。
我的问题是我应该怎么做才能将 1000 个浮点数堆叠到数组中,以便我以后可以在 Handler 之外使用它。
class Program
{
static void Main()
{
SerialPort com = new SerialPort("Com3");
com.BaudRate = 9600;
com.Parity = Parity.None;
com.StopBits = StopBits.One;
com.DataBits = 8;
com.Handshake = Handshake.None;
com.RtsEnable = true;
com.DataReceived += new SerialDataReceivedEventHandler(RxHandler);
com.Open();
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
com.Close();
}
private static void RxHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
int bytes = sp.BytesToRead;
byte[] buffer = new byte[bytes];
sp.Read(buffer, 0, bytes);
Console.WriteLine(ToFloat(new byte[] { buffer[0], buffer[1], buffer[2], buffer[3] }));
}
static float ToFloat(byte[] input)
{
byte[] fArray = new[] { input[0], input[1], input[2], input[3] };
return BitConverter.ToSingle(fArray, 0);
}
}
如果您只关心在通过现有的 ToFloat 方法验证浮点数(即 System.Single 值)后将它们保存在磁盘上,您可以使用 File.WriteAllBytes 例如.
如果您想将它们保存为人类可读的表示形式,我想您需要依赖 Single.ToString before using, say, File.WriteAllText。
这里是我添加的用于将浮点数保存到文件中的代码部分:
class Program
{
private static List<float> list = new List<float>();
static void Main() {
// see your code
// ......
com.Close();
// Write list to file
System.IO.File.WriteAllLines("data.txt", list.Select(p => p.ToString()));
// convert list to array
float[] floatArray = list.ToArray();
}
private static void RxHandler(object sender, SerialDataReceivedEventArgs e) {
// see your code
// ......
sp.Read(buffer, 0, bytes);
// store float in variable
float f = ToFloat(new byte[] { buffer[0], buffer[1], buffer[2], buffer[3] }));
Console.WriteLine(f);
// add float to list
list.Add(f);
}
我正在尝试通过 UART 将浮点数据从 STM32 板发送到计算机。 我通过 UART 以 4 帧的形式发送浮点数据 - 4x8bits。我已经制作了一个将这些帧转换回浮点数的函数。
我的问题是我应该怎么做才能将 1000 个浮点数堆叠到数组中,以便我以后可以在 Handler 之外使用它。
class Program
{
static void Main()
{
SerialPort com = new SerialPort("Com3");
com.BaudRate = 9600;
com.Parity = Parity.None;
com.StopBits = StopBits.One;
com.DataBits = 8;
com.Handshake = Handshake.None;
com.RtsEnable = true;
com.DataReceived += new SerialDataReceivedEventHandler(RxHandler);
com.Open();
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
com.Close();
}
private static void RxHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
int bytes = sp.BytesToRead;
byte[] buffer = new byte[bytes];
sp.Read(buffer, 0, bytes);
Console.WriteLine(ToFloat(new byte[] { buffer[0], buffer[1], buffer[2], buffer[3] }));
}
static float ToFloat(byte[] input)
{
byte[] fArray = new[] { input[0], input[1], input[2], input[3] };
return BitConverter.ToSingle(fArray, 0);
}
}
如果您只关心在通过现有的 ToFloat 方法验证浮点数(即 System.Single 值)后将它们保存在磁盘上,您可以使用 File.WriteAllBytes 例如.
如果您想将它们保存为人类可读的表示形式,我想您需要依赖 Single.ToString before using, say, File.WriteAllText。
这里是我添加的用于将浮点数保存到文件中的代码部分:
class Program
{
private static List<float> list = new List<float>();
static void Main() {
// see your code
// ......
com.Close();
// Write list to file
System.IO.File.WriteAllLines("data.txt", list.Select(p => p.ToString()));
// convert list to array
float[] floatArray = list.ToArray();
}
private static void RxHandler(object sender, SerialDataReceivedEventArgs e) {
// see your code
// ......
sp.Read(buffer, 0, bytes);
// store float in variable
float f = ToFloat(new byte[] { buffer[0], buffer[1], buffer[2], buffer[3] }));
Console.WriteLine(f);
// add float to list
list.Add(f);
}