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 tableau de caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 24
    Par défaut Conversion tableau de caractère
    Bonjour,

    Je souhaiterai convertir un tableau de caractère qui contient des caractères hexadécimaux du big endian au little endian. Ensuite j'aimerai évaluer ce tableau de l'hexadécimal au décimal.

    Un exemple pour mieux voir tout ca.

    Mon programme reçois la chaine de caractères suivante : "02 00" dans un tableau.

    Je souhaite la convertir en "00 02" pour l'avoir en little endian.

    Et enfin je souhaite évaluer ces 2 bytes en décimal et ainsi dans ce cas avoir "2".

    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Ne@tsoul Voir le message
    Je souhaiterai convertir un tableau de caractère qui contient des caractères hexadécimaux du big endian au little endian.

    Un exemple pour mieux voir tout ca.

    Mon programme reçois la chaine de caractères suivante : "02 00" dans un tableau.

    Je souhaite la convertir en "00 02" pour l'avoir en little endian.
    Chaque valeur est codée sur 2 octets, c'est ça ?

    Il est à espérer que chaque chaine dispose d'un nombre pair d'octets.

    Le principe est de lire le fichier d'origine et d'écrire dans un autre tableau au fur et à mesure selon le principe bien établi :



    Je suggère :

    - d'extraire les valeurs 2 à 2 avec strtoul() et la base 16 dans 2 variables a et b
    - d'écrire les variable b et a dans un autre tableau avec sprintf() et "%02X" et respectant bien le format initial (espaces).

    Ca se fait en quelques lignes. Pas de difficulté majeures. Apprendre à utiliser le 2ème paramètre de strtoul(), ça aide bien.

    A la limite, on pourrait faire une manipulation purement textuelle en découpant les mots 2 à 2 et en les écrivant dans le sens inverse dans le nouveau tableau... strtok() peut aider...

    C'est pas forcément plus simple... Faut voir...
    Ensuite j'aimerai évaluer ce tableau de l'hexadécimal au décimal.
    ...
    Et enfin je souhaite évaluer ces 2 bytes en décimal et ainsi dans ce cas avoir "2".
    On évalue pas une valeur numérique dans une autre base que le binaire sur les machines actuelles...

    Je ne vois pas ce que tu veux dire. Une valeur est une combinaison de bits. Toujours.

    Seule la représentation textuelle fait référence à une base (10, 16 etc.)

  3. #3
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 24
    Par défaut
    Bonjour emmanuel,

    Je te remercie tout d'abord pour ta réponse.

    Pour la première étape du traitement, je vois ce que tu veux dire, je pense que ca sera bon, je vais le faire.

    Pour la seconde étape, je complète mon explication :

    En fait suite à la première étape, je vais passer d'une chaine de caractère "0F 00" à la chaine de caractère suivante "00 0F".
    Maintenant ce que j'aimerai c'est avoir une fonction qui prenne en paramètre cette chaine de caractère "00 0F" et qui me retourne 16. As-tu une idée de comment faire ?

    Merci d'avance !

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Ne@tsoul Voir le message
    En fait suite à la première étape, je vais passer d'une chaine de caractère "0F 00" à la chaine de caractère suivante "00 0F".
    Maintenant ce que j'aimerai c'est avoir une fonction qui prenne en paramètre cette chaine de caractère "00 0F" et qui me retourne 16.
    16 est une valeur numérique exprimée en décimal. Ce que tu veux faire, c'est une conversion texte -> numérique... C'est le but final ? As-tu vraiment besoin de la conversion précédente ? Quel est le vrai problème en fait ? J'ai l'impression que tu es parti sur des solutions plus compliquées qu'elles ne devraient l'être...
    As-tu une idée de comment faire ?
    Oui, mais ce qui m'étonne, c'est que toi, tu n'en ais pas... Il faut tout faire à ta place ?

  5. #5
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 24
    Par défaut
    conversion texte -> numérique : oui c'est le but final !

    Pour convertir du numérique en texte, on peut utiliser sprintf, mais dans l'autre sens il ne me semble pas connaitre de fonction qui fait ça... ou du moins je ne pense pas à les utiliser...

    Hum, c'est possible que je me sois compliqué, mais bon pour récapituler et faire simple voila ce que je chercher à faire:
    Je reçois la chaine de caractère suivante "0F00" je souhaite avoir en sortie un entier qui a pour valeur 16 ou la chaine de caractère suivante "0016".

    C'est fort possible que la solution soit toute simple, mais après quelques recherches sur google, je ne suis pas arrivé à mes fins ...
    Mon principal problème est pour convertir une chaine de caractère hexadécimal en int. Si je n'avais eu que "0F", un simple cast suffit ...
    Pour faire la conversion big/little endian, j'ai essayé d'utiliser les fonctions htonl, htons... mais je devais mal m'en servir ou c'était pas approprié.

    J'espère ne pas trop t'embrouiller dans mes explications ...

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Ne@tsoul Voir le message
    conversion texte -> numérique : oui c'est le but final !

    Pour convertir du numérique en texte, on peut utiliser sprintf, mais dans l'autre sens il ne me semble pas connaitre de fonction qui fait ça... ou du moins je ne pense pas à les utiliser...
    Je t'ai parlé de strtoul(). Tu ne lis pas les réponses ? Je perds mon temps à te répondre ?
    Je reçois la chaine de caractère suivante "0F00"
    C'est pas clair. Tu reçois "0F00" ou "0F 00" C'est pas pareil.
    je souhaite avoir en sortie un entier qui a pour valeur 16 ou la chaine de caractère suivante "0016".
    Tu veux une conversion en mode texte au format décimal ? Pourquoi 4 chiffres . FFFF vaut 65535. Il faut donc 5 chiffres. Ou alors, tu es certain de ne pas dépasser 4 digits (9999 soit en hexa : 270F)...
    Mon principal problème est pour convertir une chaine de caractère hexadécimal en int. Si je n'avais eu que "0F", un simple cast suffit ...
    certainement pas.
    Pour faire la conversion big/little endian,
    On peut tout faire en une opération. Ce qu'il faut, c'est une spécification claire.

    Pour commencer, je voudrais savoir précisément comment sont codées les données d'origine.

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/06/2023, 15h51
  2. Convertir une string en tableau de caractères
    Par alainpeniche dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2007, 20h00
  3. convertir un tableau de caractère en float
    Par zerocoolyoussef dans le forum C
    Réponses: 3
    Dernier message: 20/03/2006, 22h27
  4. Conversion d'un caractère en minuscule!!
    Par feanor77 dans le forum C
    Réponses: 19
    Dernier message: 11/12/2005, 14h33

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