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 :

Ajouter '\x' devant une chaîne de caractères.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etudiant en DUT Réseaux & Télécoms
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Réunion

    Informations professionnelles :
    Activité : Etudiant en DUT Réseaux & Télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Par défaut Ajouter '\x' devant une chaîne de caractères.
    Bonjour,

    J''ai plusieurs chaînes de caractères représentant des caractères héxadécimaux mais qui sont des strings.

    Un exemple de chaîne (et sa création) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char *hex = NULL;
    size = 2;
    hex = malloc (sizeof (*hex) * (size + 1));
    hex[size] = '\0';
     
    // et enfin hex ressemble à quelque chose comme ça :
    hex = "A2";
    J'aimerais donc concaténer au début de la chaîne '\x' ou 0x pour que mon string soit considéré en hexa. J'ai bien essayé beaucoup de trucs dont le dernier en date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    strcat(pdu_connection, "\\x");
    strncat(pdu_connection, hex, 2);
    Mais le souci est que \x est reconnu car des caractères, et est donc envoyé en tant que tel dans ma trame (qui sera envoyé par socket tcp).

    Cette chaîne de caractère écrite en dur fonctionne parfaitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char BindTransceiver[] = "\x00\x00\x00\x2F\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x01\x73\x6D\x70\x70\x63\x6C\x69\x65\x6E\x74\x31\x00\x70\x61\x73\x73\x77\x6F\x72\x64\x00\x27\x56\x4D\x41\x27\x00\x34\x00\x00\x00";
    Mais j'suis obligé d'automatiser sa génération, j'en aurais pas mal à créer.

    Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    C'est parce que '\x00' est 1 caractère. Ce n'est pas du tout le caractère '\x' suivi du caractère '0' puis d'un autre '0'.
    Donc la création de ta chaîne est mauvaise.
    Ce qu'il faut c'est quelque chose proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char *hex = malloc (sizeof (char) * (2));
    hex[0] = '\xA2';
    hex[1] = '\0';
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant en DUT Réseaux & Télécoms
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Réunion

    Informations professionnelles :
    Activité : Etudiant en DUT Réseaux & Télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Par défaut
    Tu mets le doigt sur quelque chose de très intéressant, et comme ça fait pas mal de temps que je cherche, j'ai complètement zappé ça. Thanks.

    Mais du coup, ce que j'ai omis de dire (désolé, je le pensais pas nécessaire), c'est que je récupère mes deux caractères héxa d'un string, donc je dois dans un premier temps les considérer comme faisant partie d'une chaine à deux caractères (trois avec le \0).

    Comment est-ce que je pourrais "concaténer" mon formatage \x puis mes deux caractères A F en un seul ?

    EDIT : Mauvais exemple avec AF, Ascii s'arrête à 7F.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Si tu récupères 2 caractères, tu fais une opération pour en faire un code héxa correct.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre averti
    Homme Profil pro
    Etudiant en DUT Réseaux & Télécoms
    Inscrit en
    Juillet 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Réunion

    Informations professionnelles :
    Activité : Etudiant en DUT Réseaux & Télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 41
    Par défaut
    Qu'entends-tu par opération ? Mathématique (modulo) ? Parce que ça m'évoquerait du coup un changement de base.

    Dans mon exemple, prenons 7F, il ne me faut pas l'équivalent hexa de 7 puis F, mais bien que 7F lui même qui est une chaîne de deux string soit considéré comme un caractère hexadécimale.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bien entendu un changement de base.
    15 ce n'est jamais que 1 * 10 + 5 * 1. L'écriture héxadécimal n'est pas différente dans ses règles.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Ajouter un élément à une chaîne de caractères
    Par pauline59 dans le forum Général Python
    Réponses: 3
    Dernier message: 26/05/2014, 17h18
  2. ajouter [une chaîne de caractères ] tableau char
    Par silver4 dans le forum Débuter
    Réponses: 8
    Dernier message: 08/03/2013, 10h21
  3. Réponses: 13
    Dernier message: 21/02/2011, 10h34
  4. [Java]Indentation devant une chaîne de caractère
    Par mika0102 dans le forum Général Java
    Réponses: 3
    Dernier message: 07/08/2009, 10h35
  5. Réponses: 4
    Dernier message: 24/07/2006, 17h34

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