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 :

Copier un BYTE* dans un CHAR*


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut Copier un BYTE* dans un CHAR*
    Bonjour,

    je suis en train de convertir des adresses IP stockées en CHAR* vers des BYTE*.
    Néanmoins, j'aimerais pouvoir convertir ces BYTE* en CHAR* pour les afficher proprement à l'écran.

    J'ai crée une méthode Sprintf dans une classe perso CStringFct (qui fonctionne très bien):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /*static*/ LONG CStringFct::Sprintf (OUT CHAR *pc_dst, IN const CHAR *pc_format, ...)
    {
    	va_list st_listarg = NULL;
    	LONG	l_len = 0;
     
    	va_start(st_listarg, pc_format);
    	l_len = vsprintf(pc_dst, pc_format, st_listarg);
    	va_end(st_listarg);
    	return(l_len);
    }
    que j'utilise ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BYTE* pby_adresse // reçu en argument
    CHAR *pc_retour = (CHAR*)"Empty";
     
    CStringFct::Sprintf(pc_retour, "%u", pby_adresse[i_niveau]);
    mais à l'exécution, j'ai l'erreur suivante :
    Exception de première chance à 0x00528ad7 dans Appli_Test.exe*: 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x0060d610.

    Est-ce que quelqu'un sait comment je peux faire pour écrire mes BYTE dans un CHAR* ?

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    En faisant n'importe comment, on a n'importe quoi ^^. Je m'explique :
    en faisant 'CHAR *pc_retour = (CHAR*)"Empty";', tu fais pointer pc_retour sur une chaine constante (c'est pour ça que tu as dû la caster en CHAR *, pour enlever le 'const'). Ce n'est pas forcément un problème en soi, mais le fait que tu essaies d'écrire dedans avec ta fonction Sprintf provoque une exception de type 'Violation d'accès'.
    Il faut donc que tu alloues toi-même une chaine de caractères, ou un buffer de CHAR, afin de pouvoir écrire dedans (exemple : 'CHAR pc_retour[512];').

    Cependant, pour répondre à ta problématique initiale, il y a bien plus simple : un 'BYTE' est en fait un 'unsigned char' et tu peux sans soucis faire ceci : 'CHAR * pc_retour=(CHAR *)pby_adresse'
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    hello,

    merci pour ta réponse, je comprend mieux le problème.

    J'ai essayé de mettre 'CHAR * pc_retour=(CHAR *)pby_adresse', mais l'affichage à l'écran avec printf("%s", pc_retour) n'est pas correct. Il m'affiche des symboles.

    Par contre, en faisaint ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BYTE* pby_adresse // reçu en argument
    CHAR *pc_retour = (CHAR*)"Empty";
     
    if (condition)
    {
       pc_retour = new CHAR[by_size_adresse+1];
       for (int i_niveau = 0;  i_niveau < by_size_adresse; i_niveau++) 
       {
          CStringFct::Sprintf(pc_retour, "%u", pby_adresse[i_niveau]);
       }
    }
    ça fonctionne très bien.

    Merci pour le coup de main

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 91
    Par défaut
    Pourquoi gardes-tu le :
    CHAR *pc_retour = (CHAR*)"Empty";
    ?

    CHAR* pc_retour;
    suffirait non ?

    Ps: Bien sur, aucun intérêt "technique", plus un intérêt "esthetique".

  5. #5
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Je le garde, car si la condition n'est pas remplie, je retourne "Empty".

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Tu t'es trompé de forum.

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

Discussions similaires

  1. Copier un char* dans un char[xx]
    Par ViRouF dans le forum C++
    Réponses: 8
    Dernier message: 21/03/2007, 15h49
  2. Réponses: 11
    Dernier message: 03/11/2006, 23h53
  3. Copier un long dans un tableau de char?
    Par the_ionic dans le forum C
    Réponses: 15
    Dernier message: 29/06/2006, 09h31
  4. Réponses: 10
    Dernier message: 19/06/2006, 19h04
  5. Réponses: 21
    Dernier message: 16/05/2006, 07h56

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