IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Convertir chaine de caractère en float C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 18
    Par défaut Convertir chaine de caractère en float C#
    Bonjour,
    Je m'adresse à vous car depuis hier j'ai du mal à trouver la solution :
    Je m'explique, je reçois via une liaison série RS232 des caractères du type ("0r'r01jI+9F501") etc...
    c'est caractère sont envoyés par un scanner de proximité (SICK).
    Il me renvoie tout le temps les nouvelles détections de proximité (Valeur en float).
    Comment puis-je décoder ces informations et les traduire en type float ?

    Les caractères sont stockés dans une variable string puis affiché sur une Rich Text Box.
    J'aimerai les affichés en float toujours dans la RTB
    Je vous donne mon code "simplifié" pour récupérer les caractères en string :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
        public partial class Form1 : Form
        {
            internal delegate void SerialDataReceivedEventHandlerDelagate(Object sender, SerialDataReceivedEventArgs e); 
     
            SerialPort PortCom = new SerialPort();
            string InputData = string.Empty;
            delegate void SetTextCallback(string text);
     
            public Form1()
            {
                PortCom.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived_1);
            }
     
     
            private void port_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
            {
                InputData = PortCom.ReadExisting(); //Récupération des caractères 
     
                if (InputData != String.Empty)
                {
                    this.BeginInvoke(new SetTextCallback(SetText), new object[] { InputData });
                }
            }
     
            private void SetText(string text)
            {
               this.RTB_Data.Text += text; //Envoie les caractères dans la RTB 
            }
        }
    En vous remerciant.
    Cordialement,
    Steph

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    tu veux transformer "0r'r01jI+9F501" en float, en prenant les bytes 4 par 4 ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 18
    Par défaut
    Alors là pour tout te dire je sais pas trop.
    Tout dépend de l'info envoyé par le SICK mais admettons, comment cela pourrait ce faire ?

  4. #4
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Imaginons que ce soit ça alors :
    - tu dois récupérer des bytes et non une string sur ton port (avec la fonction Read(byte[], int, int) par exemple),
    - tu convertis ton tableau de bytes en float avec la fonction ToSingle(byte[], int) de BitConverter.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 18
    Par défaut
    J'ai essayé mais le programme plante directe,
    j'ai remplacé de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
        public partial class Form1 : Form
        {
            internal delegate void SerialDataReceivedEventHandlerDelagate(Object sender, SerialDataReceivedEventArgs e); 
     
            SerialPort PortCom = new SerialPort();
            int InputData ;
    	float valFloat; 
    	byte[] valeur; 
     
            delegate void SetTextCallback(float val);
     
            public Form1()
            {
                InitializeComponent();
                PortCom.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived_1);
            }
     
     
            private void port_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
            {
                InputData = PortCom.Read(valeur, 0, 4); 
    	    valFloat = BitConverter.ToSingle(valeur, 0) 
     
                this.BeginInvoke(new SetTextCallback(SetText), new object[] { valFloat });
     
            }
     
            private void SetText(float val)
            {
               this.RTB_Data.Text += val; 
            }
         }

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Ça plante où exactement ? InputData est bien égal à 4 après l'appel à Read ?

Discussions similaires

  1. Réponses: 15
    Dernier message: 22/08/2012, 20h11
  2. Réponses: 8
    Dernier message: 23/04/2009, 17h57
  3. convertir chaine de caractère hexadecimale en image
    Par cotede2 dans le forum ImageJ
    Réponses: 1
    Dernier message: 20/04/2009, 16h15
  4. Convertir chaine de caractère en suite de codes ASCII
    Par mixka13 dans le forum Débuter
    Réponses: 7
    Dernier message: 20/11/2008, 17h05
  5. [VB.net 2005] convertir chaine de caractère en type 'date'
    Par kinganasius dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/07/2006, 23h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo