C# сохранение данных COMport в файл

Я пытаюсь отправить плавающие данные с платы STM32 на компьютер через UART. Я посылаю данные с плавающей точкой через UART в 4 кадра - 4х8 бит. Я уже сделал функцию, которая преобразует эти кадры обратно в плавающее.

Мой вопрос заключается в том, что я должен сделать, чтобы сложить как 1000 float в массив, чтобы я мог позже использовать его - за пределами 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);
    }
}

2 ответа

Решение

Вот части кода, которые я добавил, чтобы сохранить числа в файле:

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);
    }

Если все, что вас волнует, - это сохранение байтов с плавающей точкой на диске после их проверки (например, значений System.Single) через существующий метод ToFloat, вы можете использовать, например, File.WriteAllBytes.

Если вы хотите сохранить их как удобочитаемое представление, я думаю, вы захотите использовать Single.ToString перед использованием, скажем, File.WriteAllText.

Другие вопросы по тегам