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 :

Remplir un tableau de char avec un int contenu dans un textbox


Sujet :

C#

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut Remplir un tableau de char avec un int contenu dans un textbox
    Bonjour

    Y aurait il une solution plus élégante que le code ci dessous (parfaitement fonctionnel), pour remplir un tableau de char avec un int contenu dans un textBox ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Boolean erreur;
    int nombre, fort, faible;
    Boolean result;   
     
    result = int.TryParse(textBox11.Text, out nombre);
    fort = nombre >> 8; // 255;
    faible = nombre - (fort << 8);
    erreur = Byte.TryParse(fort.ToString(), out OutBuffer[12]);
    erreur = Byte.TryParse(faible.ToString(), out OutBuffer[13]);
    merci par avance
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Hello,

    comme en C et C++, pas besoin de passer par les string pour convertir les types numériques entre eux. Si fort et faible sont inférieurs à 255, il te suffit de faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte machin = (byte)fort;
    byte bidule = (byte)faible;
    ಠ_ಠ

  3. #3
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut
    Bonjour

    Merci pour la réponse

    Mon problème est que la valeur saisie dans le textBox est un string, si je pouvais récupérer directement un type numérique je serais bien heureux...

    Le top serait ensuite de pouvoir définir une union de structure pour ne pas avoir de calcul à faire et utiliser directement (ex pour un short) soit le short (16bit) soit un de ses deux byte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef union
    {
    unsigned short LeShort;
    struct
    {
    unsigned char OctetPoidsFort ;
    unsigned char OctetPoidsFaible ;
    }
    ShortEnDeux;
    }
    ShortAmoi;
    C# est surement très puissant mais je n'arrive pas à faire simplement des choses ultra simples.

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par petitours Voir le message
    Bonjour

    Merci pour la réponse

    Mon problème est que la valeur saisie dans le textBox est un string, si je pouvais récupérer directement un type numérique je serais bien heureux...
    Oui mais t'es d'accord que t'as deux problématiques bien distinctes:
    - traduire la saisie user, qui est une string, sous forme numérique
    - convertir cette valeur numérique dans une autre représentation

    Ce dont je te parlais ne concerne que cette deuxième étape. Je connais pas ton besoin : pourquoi veux tu convertir un int en tableau de bytes ?

    D'ailleurs, quelle doit être la taille de la saisie user (16 bits ? 32 bits), et la taille de ton tableau ? En C#, contrairement à C et C++, int, long, short ont une taille fixe:
    short => 16 bits
    int => 32 bits
    long => 64 bits
    Je crois comprendre que tu ne veux que deux bytes : la saisie user est donc de taille 16 ?

    D'ailleurs, ce ne sont que des alias vers des types de la CLR (Int16, Int32, Int64), qui comme leur nom le laisse supposer, sont de taille indépendante de la plateforme.
    ಠ_ಠ

  5. #5
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut
    Là j'ai pris un exemple avec un short à passer en byte mais ca peut être d'autres types à la base.

    Un besoin typique que je vais avoir :
    En C# J'ai une com USB qui gère un buffer (in et out) en byte.
    J'ai un IHM avec des textBox qui me permet de saisir des paramètres (des nombres entier ou a virgule de toutes taille (donc des unsigned char mais aussi des short, des unsigned short et des float) ainsi que du texte que je dois rentrer dans mon buffer de byte.
    Il y a donc passage de TextBox vers tous les types, puis tous les types vers tableau de byte.

    L'autre cas typique sera ensuite "la même chose dans l'autre sens" : passer du tableau de byte vers tous les formats (pour faire du traitement sur les données.
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  6. #6
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    OK je vois mieux.

    J'ai jamais trop fait de sérialisation binaire, et je pense qu'il y a des classes dans le framework qui se chargeraient toutes seules de convertir une valeur numérique en tableaux de byte (en gérant l'endianness ce ce genre de choses), mais même sans ça, ça veut juste dire que t'auras une classe quelque part qui convertirait chacun des types numériques (short,int, ...) en un tableau de byte.

    Tu auras toujours intérêt, et ce n'est pas propre à C# du tout, à découper les responsabilités des modules (des classes, en l'occurence); ici, typiquement, convertir la saisie user en int/short/long/ autre c'est une problématique de pure UI, tandis que sérialiser ça, c'est dans la couche la plus basse de ton appli.

    C'est pour ça que j'insistais sur le fait qu'il y a deux étapes bien distinctes.

    L'intérêt principal des langages comme java ou C#, outre qu'ils ont une syntaxe plus claire que leurs aînés dont ils ont profité de l'expérience, c'est l'énorme librairie qui est fournie avec. Je ne sais pas dans quelle mesure ce que tu développes est spécifique, mais il est plus que probable que tu ne sois pas obligé de réinventer autant la roue qu'en C (même s'il existe bien sûr des lib en C, hein, mais elles sont moins standardisées )
    ಠ_ಠ

  7. #7
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut
    re

    pour obtenir les octets d'un autre type j'ai trouvé ca grace au forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void GetBytesSingle(float argument)
    {
    byte[] byteArray = BitConverter.GetBytes(argument);
    MessageBox.Show(byteArray[0].ToString());
    MessageBox.Show(byteArray[1].ToString());
    MessageBox.Show(byteArray[2].ToString());
    MessageBox.Show(byteArray[3].ToString());
    }
    Mais là je me demande si on ne touche pas la corde de mon incompétence :
    à découper les responsabilités des modules (des classes, en l'occurence)
    Une couche de bas niveau pour moi actuellement ca va être par exemple la fonction ci dessus : une fonction avec des entrées et des sorties...
    Il me semble qu'une classe voit bien plus loin que ca mais je n'arrive pas à me projeter sur ce qu'une classe peut m'apporter par rapport à cette notion de bas niveau.

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  8. #8
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    On a toujours intérêt à modulariser son code, quel que soit le langage utilisé et son paradigme; il se trouve juste que la POO est principalement centrée là-dessus, en créer une unité de module appelée "classe", qui propose de faciliter l'encapsulation (private public etc.) en ne présentant qu'une interface au reste du monde et en masquant tout le reste.

    Mais sans aller jusque là: ton UI n'a pas besoin de savoir que les données saisies vont être séralisées en binaire; ton sérialiseur n'a pas besoin de savoir que les données viennent d'une GUI windows forms. Il y a donc un ensemble de techniques, plus ou moins complexe selon la complexité du projet et la connaissance de ceux qui le développent, permettant d'assurer ce découpage. Le minimum, c'est comme en C d'isoler la logique dans une méthode à part ; ensuite, selon les cas, le code GUI et le code bas niveau seront dans la même classe, ou dans deux classes qui se connaissent, ou séparés par une interface (au sens C# du terme), dans des assemblies différentes, reliés par un conteneur IOC, ...

    Là, ton besoin a l'air simple, et si ton sérialiseur ne fait que wrapper des appels à BitConverter, il peut être juste une collection de méthodes statiques comme celles que tu viens d'écrire, que ton code GUI appelera directement.
    ಠ_ಠ

Discussions similaires

  1. [Débutant] comment remplir un tableau sous excel avec des données de DGV?
    Par spring.time dans le forum VB.NET
    Réponses: 6
    Dernier message: 26/10/2012, 20h36
  2. Réponses: 4
    Dernier message: 11/06/2012, 16h11
  3. Tableau de char avec valeur incohérente.
    Par bigbobby64 dans le forum Débuter
    Réponses: 4
    Dernier message: 25/05/2012, 14h18
  4. fonction pour remplir un tableau de char *
    Par saidus dans le forum C
    Réponses: 3
    Dernier message: 02/05/2009, 10h28
  5. Réponses: 15
    Dernier message: 22/12/2006, 14h28

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