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 :

convertion unsigned char* en chaine caractère


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 54
    Points : 19
    Points
    19
    Par défaut convertion unsigned char* en chaine caractère
    Bonjour à tous,

    Je voudrais transformer la valeur d'un unsigned char* (qui est en hexa) en decimal.



    J'ai pensé dans un premier temps transformer le unsigned char* en chaine de caractère, traiter la chaine (en retirant le 0x qui se trouve devant), puis le convertir en décimal.
    Le problème est que je n'arrive pas à convertir "myStream" en chaine de caractère.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::ostringstream out;
    out << (myStream);
    std::string op=out.str();
    strcpy(test,op.c_str());
    me retourne une exception non gérée "System.AcessViolationException"

    Merci d'avance
    Persnip77

  2. #2
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Errare humanum est ... sed humanus naturae erratum est.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 54
    Points : 19
    Points
    19
    Par défaut
    Merci de ta réponse, je vais tester ça

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 54
    Points : 19
    Points
    19
    Par défaut
    Je viens de regarder ton lien, ça m'aidera surement après! Le problème est que tous les exemples sont basés sur des "string", or moi j'ai un "unsigned char*".
    J'ai toujours le problème de convertion, quelque soit la synthaxe que j'utilise: exception non gérée "System.AcessViolationException".

  5. #5
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    bon je ne connais pas l'étendue de tes connaissances en C++, mais ton unsigned char* est en fait un pointeur sur un unsigned char (dont la valeur est indéterminée ici). Donc ce que tu veux c'est convertir l'adresse de ta variable en string ? Car unsigned char * ne contient pas la valeur de la chaîne, c'est un endroit en mémoire.
    Errare humanum est ... sed humanus naturae erratum est.

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 54
    Points : 19
    Points
    19
    Par défaut
    Je suis d'accord avec ce que tu dis,
    moi ce que je veux c'est recuperer le "0x00002776" (voir image de mon premier post) dans un tableau de char pour la convertir en decimal par la suite car j'ai l'impression qu'il n'apprecie pas trop de "0x" devant.
    Merci pour ton aide.

  7. #7
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Je sais que ce n'est pas secure, que c'est moche, mais ne serait-ce que pour tester ça vaut le coup : char * l_pTmp = (char *)myStream, ça donne quoi ?
    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).

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 54
    Points : 19
    Points
    19
    Par défaut
    Merci dragonjoker59,
    mais ta solution ne fais que dupliquer myStream en fait.
    Ca crée un char* et non un char[] car lorsque j'essaye d'utiliser (par exemple) la case 2 de l_pTmp ca me met une exception non gérée : system.nullreferenceexception.
    J'ai essayé à partir du char* de creer un string met il me remet l'erreur du debut.

    Mais plus j'avance plus je me demande si c'est vraiment possible...

  9. #9
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    En fait j'ai relu ton post depuis le début et le but à la base est de convertir un hex en déc, parce qu'il y a le "0x", mais toutes les données hexa commencent par "0x" normalement.

    C'est quoi ton problème en gros avec l'adresse de ton myStream ?
    Errare humanum est ... sed humanus naturae erratum est.

  10. #10
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Pareil, je ne comprends pas bien ce que tu veux faire...
    Si c'est seulement récupérer la valeur du pointeur dans un entier, il suffit juste de caster, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char* str = "toto";
    int i = (int)str;
    Edit : Hmm à la réflexion ça risque de planter sur une machine 64 bit. Faut remplacer le int par un intptr_t pour éviter les ennuis.

  11. #11
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par Arzar Voir le message
    Pareil, je ne comprends pas bien ce que tu veux faire...
    Si c'est seulement récupérer la valeur du pointeur dans un entier, il suffit juste de caster, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char* str = "toto";
    int i = (int)str;
    Edit : Hmm à la réflexion ça risque de planter sur une machine 64 bit. Faut remplacer le int par un intptr_t pour éviter les ennuis.
    Bouh un vilain cast C-style !

    Persnip, tu veux convertir en décimal une adresse mémoire. J'ai beau réfléchir, je ne vois pas à quoi ça peut servir. Etant donné que tu es débutant en C++, je pense que tu es sur la mauvaise piste. Dis nous plus exactement ce que tu cherches à faire et on pourra sûrement t'aider.
    Find me on github

  12. #12
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Au vu des erreurs reportees par le PO, j'ai l'impression qu'il essaie de compiler du code c++ dans un projet parametre pour du c#, ou quelque chose dans le style.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 54
    Points : 19
    Points
    19
    Par défaut
    Merci à tous pour votre aide,
    j'ai trouvé une solution de contournement: je récupère ma variable par un autre moyen et en plus déjà convertie en décimal donc plus de problème.
    Désolé de ne pas perceverer sur la convertion, mais il faut absolument que j'avance mon projet!!
    Encore merci
    Persnip

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Je suis quand même curieux de savoir à quoi te sert une adresse mémoire convertie en décimal ???
    Find me on github

  15. #15
    Membre à l'essai
    Inscrit en
    Juin 2011
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 54
    Points : 19
    Points
    19
    Par défaut
    Pour etre bref: je developpe une application qui permet d'afficher un plan de réseau composé de switch(affichage des switchs et des liaisons qu'ils ont entre eux).
    J'utilise les windows form. Le deuxième but est de tracer le chemin d'un flux multicast dans le réseau. Pour cela j'interroge en SNMP tous les switch pour savoir par où entre et par où sort le flux.
    Et pour develloper cette dernière partie, j'ai interroger la mib des switch à partir de mon PC pour connaitre les valeurs que je devais recupérer, et sachant qu'elle valeur je devais récuperer, j'ai comparé à toutes les variables que la requete SNMP me renvoyait.
    C'est là que j'ai vu que la valeur qu'il me fallait etait 0x00002776 convertie en decimal.
    Au debut j'ai été aussi surpris que vous, lrosque j'ai vu que c'etatit une adresse mémoire, mais lorsque j'ai fait le test sur plusieurs switch, il s'averait qu'à chaque fois l'adresse mémoire correspondait à ma valeur en hexa!
    Voila, je ne sais pas si c'est très clair...

  16. #16
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par Persnip77 Voir le message
    Pour etre bref: je developpe une application qui permet d'afficher un plan de réseau composé de switch(affichage des switchs et des liaisons qu'ils ont entre eux).
    J'utilise les windows form. Le deuxième but est de tracer le chemin d'un flux multicast dans le réseau. Pour cela j'interroge en SNMP tous les switch pour savoir par où entre et par où sort le flux.
    Et pour develloper cette dernière partie, j'ai interroger la mib des switch à partir de mon PC pour connaitre les valeurs que je devais recupérer, et sachant qu'elle valeur je devais récuperer, j'ai comparé à toutes les variables que la requete SNMP me renvoyait.
    C'est là que j'ai vu que la valeur qu'il me fallait etait 0x00002776 convertie en decimal.
    Au debut j'ai été aussi surpris que vous, lrosque j'ai vu que c'etatit une adresse mémoire, mais lorsque j'ai fait le test sur plusieurs switch, il s'averait qu'à chaque fois l'adresse mémoire correspondait à ma valeur en hexa!
    Voila, je ne sais pas si c'est très clair...
    Ca m'a tout l'air de ressembler à un bug. Un pointeur représente une adresse mémoire située dans la mémoire virtuelle de ton processus. Le switch ne peut en aucun cas en avoir connaissance, et encore moins décider d'une zone. Mon avis est qu'une tringlerie quelque part écrit la valeur dans le pointeur, alors qu'elle devrait :
    - Soit l'écrire dans une variable qui n'est pas un pointeur
    - Soit allouer de la mémoire, mettre l'adresse allouée dans le pointeur et mettre la valeur dans la zone mémoire en question.

    Que se passe-t-il si tu déréférences le pointeur en question pour voir ? A mon avis, ça va crasher.
    Find me on github

Discussions similaires

  1. convertion un réel à une chaine de caractére
    Par casuals dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 08/04/2013, 11h54
  2. Probleme convertion chaine caractère en hexa
    Par DiamonDonald dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/07/2008, 16h19
  3. char et unsigned char
    Par jobherzt dans le forum C++
    Réponses: 8
    Dernier message: 11/02/2005, 00h24
  4. [Java][char] Reconnaissance de caractères
    Par ZeKiD dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 09/04/2004, 18h07
  5. Char(x) -> chaine concaténée d'espaces ?
    Par rgz dans le forum Débuter
    Réponses: 7
    Dernier message: 27/06/2003, 11h59

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