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 :

conversion d'une trame hex en binaire


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Points : 11
    Points
    11
    Par défaut conversion d'une trame hex en binaire
    bonsoir,
    j'ai rencontré un petit problème concernant le décodage d'une trame , donc mon trame reçu est en hex et je veux la convertir en binaire puis mettre ses variable binaire dans un tableau pour les traiter ensuite , voila c'est mon code avec 0 erreur , quand je compile tout a fait normal avec des entiers(0->9) mais quand il reçoit une lettre (A->F) une erreur de compilation apparaît , je trouve pas la solution pour cette erreur.
    merci pour votre aide.
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    #include "stdafx.h"
    #include <iostream>
    #include <sstream>
    #include <bitset>
    #include <string>
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdint.h> 
    using namespace std;
     
     
    const char* hex2bin(char c)
    {
     
    	switch (toupper(c))
    	{
    	case '0': return "0000";
    	case '1': return "0001";
    	case '2': return "0010";
    	case '3': return "0011";
    	case '4': return "0100";
    	case '5': return "0101";
    	case '6': return "0110";
    	case '7': return "0111";
    	case '8': return "1000";
    	case '9': return "1001";
    	case 'a': return "1010";
    	case 'b': return "1011";
    	case 'c': return "1100";
    	case 'd': return "1101";
    	case 'e': return "1110";
    	case 'f': return "1111";
    	}
    }
    std::string hex_to_bin( std::string& hex)
    {
     
    	std::string bin;
    	for (unsigned i = 0; i <8; ++i)
    		bin += hex2bin(hex[i]);
    	return bin ;
    }
     
    std::string dfg(const std::string resp[10])
    {
    	std::string  RS;
    	std::string a;
    	std::string tab[16];
    	for (int i = 4; i < 8; ++i)
    		RS += resp[i];
     
    	a = hex_to_bin(RS);
    	for (int i = 0; i != a.length(); ++i)
    	{
    		tab[i] = a[i];
    	}
    	StatusFlag();
    	for (int i = 0; i < 16; i++)
    	{
    		if (tab[i] == "1")
    			status[i].statu = true;
    		else
    			status[i].statu = false;
    	}
    	return RS;
    }
     
    int main()
    {
    	std::string b;
    	std::string resp[10] = { "25", "9f", "63", " 25", "36", "42", "15", "EC", "5b", "a9" };
    	b = dfg(resp);
    	return 0;
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Erreur de compilation... ou plutôt à l'exécution ?
    Rien ne te choque sur ces lignes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	switch (toupper(c))
    	{
    	...
    	case 'a': return "1010";
    	case 'b': return "1011";
    	case 'c': return "1100";
    	case 'd': return "1101";
    	case 'e': return "1110";
    	case 'f': return "1111";
    	}
    Remarques :
    • la fonction hex_to_bin ne modifiant pas hex, autant passer une référence constante.
    • c'est peut-être fait exprès pour confidentialité, mais si ce n'est pas le cas, je ne peux que t'encourager à donner des noms plus parlants à tes variables.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    merci pour votre repense , quand je veux compiler mon code une fenêtre apparaît avec ce message :
    "First-chance exception at 0x00337D81 in ConsoleApplication9.exe: 0xC0000005: Access violation reading location 0x00000010.
    If there is a handler for this exception, the program may be safely continued." et la compilation s’arrête et ne retourne aucune resultat

  4. #4
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Moi, j'activerai les warnings du compilo parce que si hex2bin ne trouve rien le retour est indéfini.
    Aussi, a.length() est largement supérieur à 16.

    Note: se n'est pas une erreur de compilation mais d’exécution.

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Et pour être précis, c'est une erreur de segmentation due à la lecture dans une case mémoire qui n'est pas tienne.
    Deux possibilités:
    • un pointeur non initialisé (ou mal)
    • un débordement de tableau
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    Je pense comme jo_lin_noir que c'est dû au fait que a.length() > 16!
    A mon avis tu ne tires pas assez parti des possibilités du c++: remplace tes tableaux statiques par des vecteurs standards!
    Ou sinon utilise at(pos) plutôt que [pos] pour l'indexation des chaînes, tu seras averti par une exception si ça déborde

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    bonjour ,

    mon problème c'est seulement avec les lettres alphabétiques, mais quand ma trame est toute en entiers il me retourne le résultat souhaité.
    c'est bizarre !!!

    donc le problème est au niveau la fonction , concernant a.length je la remplacé par 32 et mon tableau aussi tab[32].

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    as-tu lu la réponse de Winjerome?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    je trouve la sol , il suffit juste de changer "toupper" par char est ça marcha
    merci pour vos soutiens

  10. #10
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    non, pas char, mais tolower()
    char est un cast inutile, la variable étant déjà un char
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. envoyer une trame en hex
    Par Mn said dans le forum C++
    Réponses: 5
    Dernier message: 13/05/2015, 14h21
  2. VBA _ Extraction dans une trame en Hex à convertir en Single.
    Par Sacariz dans le forum Général VBA
    Réponses: 2
    Dernier message: 09/05/2015, 12h06
  3. Génération d'une trame binaire -1 à 1
    Par Vilvo dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 09/03/2015, 15h03
  4. Réponses: 15
    Dernier message: 14/08/2009, 14h45
  5. Conversion MD5 hex en binaire
    Par jamesb dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/03/2009, 21h25

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