Преобразование числового значения типа Float для передачи по RS-232 (SerialPort) - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Возникла следующая проблема: необходимо преобразовать число типа Float для передачи по COM-порту следующим методом:
Write(Byte[], Int32, Int32)
преобразовать надо в 4 байта (2 до запятой с учетом знакоразряда и 2 после запятой), потом разбить по одному байту и передавать. Передача выглядит следующим образом: +/-1б 2б (фиксированная точка) 3б 4б. Есть идея - записывать число в переменную типа string, а потом проводить анализ и разбивать на байты. Причем, для удобства, первый байт сначала конвертировать в тип sbyte (со знаком), а потом в byte. Но, не хотелось бы так извращаться =( Может имеется более простой способ?
А всё оказалось еще проще =) Ниже привел пример кода. Единственное неудобно, что старший разряд не BM[0], а BM[4]... Но это уже издержки производства)
                f = float.Parse(IDD_tb.Text); // string to float
                byte[] BM = BitConverter.GetBytes(f); // create bytes array (float to byte)
                for (i = 0; i < BM.Length; i++)
                {
                    Rez_l.Text += BM[i].ToString() + " "; // check
                }
                Rez_l.Text += BitConverter.ToSingle(BM, 0).ToString(); // BitConverter.ToSingle(BM, 0) - byte to float

Решение задачи: «Преобразование числового значения типа Float для передачи по RS-232 (SerialPort)»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace test_string_to_float_4_byte
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        char[] delimiterChars = { ',', '.'};
        private void button1_Click(object sender, EventArgs e)
        {
            #region ///////////////////////////Tx
            label1.Text = "";  label3.Text = "";
            string[] str = textBox1.Text.Split(delimiterChars);
            int i=str.Length;
            for(int k=0;k<i;k++)
            {
                label1.Text += str[k] + "  ";
            }
 
            short rez = short.Parse(str[0]);
            ushort rez1 = ushort.Parse(str[1]);
            
            byte[] BM = BitConverter.GetBytes(rez);
            
            //string dd = //BMz[0].ToString() + BMz[0].ToString();
            string inv_BMz = inv_str(str[1]);//);
 
            byte[] BMz = BitConverter.GetBytes(ushort.Parse(inv_BMz));
            #endregion
 
            ////////////////////////////////////////////////////////////////////
            
            i = BM.Length;
            for (int k = 0; k < i; k++)
            {
                label1.Text += BM[k] + "  ";
            }
            /////////check
            i = BMz.Length;
            for (int k = 0; k < i; k++)
            {
                label1.Text += BMz[k] + "  ";
            }
 
 
 
            #region ///////////////////////////Rx
 
            label1.Text += BitConverter.ToInt16(BM, 0).ToString() + "   " + BitConverter.ToInt16(BMz, 0).ToString();
            string istr = inv_str(BitConverter.ToInt16(BMz, 0).ToString());
            string ss =BitConverter.ToInt16(BM, 0).ToString() + ","+istr;
            try
            {
                istr = float.Parse(ss).ToString();
            }
            catch
            {
                MessageBox.Show("Ошибка при переводе типа данных во float");
            }
            
            label3.Text = istr;
            #endregion ////////////////////////////////////////////////////////////////////
 
        }
 
        public static string inv_str(string massA)
        {
            int  sizem = massA.Length;
            string rez="";
            for (int i=0; i < sizem; i++)
            {
                rez += massA[sizem-1-i];
            }
            return rez;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы