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

Web & réseau Delphi Discussion :

INDY - Réception des données en hexadécimal


Sujet :

Web & réseau Delphi

  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 42
    Par défaut INDY - Réception des données en hexadécimal
    Bonjour tout le monde

    J'ai un terminal distant qui envoie les données en hexadécimal: le problème est qu'après réception des données côté application (utilisant les composants INDY) les données que je reçois sont au format ASCII; certains caractères bizarres apparaissent dans le TMemo que j'utilise pour afficher les données reçues.

    Est-il possible de recevoir les données directement en hexadécimal?

    Cordialement,
    M

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    quand tu dis qu'il envoie des données en héxadécimal, est-ce que cela veut dire que tu reçoit tes données dans une chaîne avec représentation en héxadécimal (0-9A-F) ou bien que c'est des données binaire que tu reçoit directement ?

    Est-ce que par hasard ton terminal n'enverrait pas de l'Unicode (1 caractère sur deux octets) plutôt que de l'Ansi (1 caractère sur un octet). Si tu reçoit de l'Unicode alors ton TMemo n'appréciera pas du tout la chaîne que tu essayes de lui faire afficher puisque par défaut les composants Delphi ne gère que l'Ansi.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 42
    Par défaut Un exemple vaut milles explications :)
    Citation Envoyé par Aka Guymelef Voir le message
    Bonjour,

    quand tu dis qu'il envoie des données en héxadécimal, est-ce que cela veut dire que tu reçoit tes données dans une chaîne avec représentation en héxadécimal (0-9A-F) ou bien que c'est des données binaire que tu reçoit directement ?

    Est-ce que par hasard ton terminal n'enverrait pas de l'Unicode (1 caractère sur deux octets) plutôt que de l'Ansi (1 caractère sur un octet). Si tu reçoit de l'Unicode alors ton TMemo n'appréciera pas du tout la chaîne que tu essayes de lui faire afficher puisque par défaut les composants Delphi ne gère que l'Ansi.
    D'abord, Merci de ta réponse Aka Guymelef.

    Voici la trame qui s'affiche sur le TMemo:
    53X @'ÿÿ™™ + données texte (température, date et heure: exemple: 18082008,15C (Celcius)).


    Donc en fait, la première partie est en hexa et la seconde partie est en ASCII.
    Ce que je voudrais faire c'est afficher dans le Memo les données hexa comme ceci : 62 35 33 58 01 20 40, le reste des données ne pose pas problème.

    Voici la méthode execute de mon TidTCPServer:
    with AThread.Connection do
    begin
    Trame := ReadLn;
    memoLog.Lines.Add(Trame);
    end

    La solution que j'ai trouvé est de convertir la première partie de "trame" en hexa, puis de concaténer le résultat (variable de type string) avec le reste de "trame" puis d'afficher le tout sur le TMemo.

    Le résultat est correct mais ce que je voudrais savoir s'il est possible de recevoir "trame" directement en hexadécimal (comme ceci :62 35 33 58 01 20 40 27 0F FF FF 99 99 95....) et de les afficher directement sur le TMemo (sans avoir à convertir les données en hexa puis de mettre le résultat dans une variable de type string).

    Merci d'avance

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Alors c'est là où tu fais mal la distinction entre binaire et héxadécimal.

    En effet si le début de ta trame était en héxadécimal, et bien cela fonctionnerait directement comme tu veux car quand on dit en héxadécimal il faut en fait comprendre une représentation héxadécimale sous forme de chaîne (donc que avec des caractères 0-9A-F).

    Or ici il se trouve qu'en réalité le début de la trame est bien du binaire qu'on t'envoie, si tu veux avoir un visu héxadécimal de ce binaire alors il faut effectivement extraire le binaire puis le convertir en une représentation héxadécimale comme tu sembles avoir réussit à le faire. Il n'y a pas d'autres alternatives.

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 42
    Par défaut MERCI
    Merci beaucoup de votre aide


    Cordialement,
    M

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    De rien, si ton problème est résolu, merci de cliquer sur le bouton en bas du sujet.

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

Discussions similaires

  1. [RCP] Envoi et réception des données entre view et window
    Par chiraz86 dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 25/03/2010, 20h01
  2. Réponses: 2
    Dernier message: 12/02/2010, 10h34
  3. Réponses: 6
    Dernier message: 06/09/2009, 14h18
  4. Réponses: 1
    Dernier message: 21/06/2009, 22h28
  5. Réception des données sur un autre serveur
    Par u115rcu dans le forum Langage
    Réponses: 5
    Dernier message: 20/01/2007, 14h20

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