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 :

[debutant] Int envoyés par sockets


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 54
    Par défaut [debutant] Int envoyés par sockets
    Bonjour
    Je n'ai jamais programmé en C++, je sais juste me débrouiller avec des petits langages (PHP, Python, ...).
    En ce moment, je travaille sur un projet d'un radar pour un simulateur écrit en C++ dont je ne dispose pas le code source. A l'aide de sniffers, j'ai réussi à trouver les "messages" en hexa-ascii à envoyer pour ce connecter au serveur de ce simulateur, envoyer des messages... lire les nombres de munitions qui sont des nombres entiers (b8 0b -> 3000 à l'envers <- bb8), mais pas à lire les coordonnées qui sont des nombres à virgules flottante et pouvant être négatifs.
    Après plusieurs essais, j'ai réussi à trouver quelques coordonnées, mais pas de relation linéaires entre coordonnées réelles et coordonnées en hexa transmises.

    Je voulais donc savoir comment en C++, la fonction qui permet d'envoyer des nombres à virgules flottante fait pour convertir ces nombres en hexa-ascii pour les envoyer sur un socket ???

    J'ai reçu ces indications de l'auteur du programme:
    No, coordinates are not encrypted. Just plain 4-byte floating point
    (times three.) Actually, there are two types of formats: short format
    and long format, a long format packet has more information than
    a short format packet (of course) but used only when necessary.
    The server mostly use the short format. I need to go back to my
    code, but if I am right, the short format starts with the command
    id of 11 (0x0000000b) followed by the time (4-byte float), and then
    x, y, z, heading, pitch, and bank (all in 4-byte float). The packet
    includes more informations, but probably you can figure out by
    yourself.
    Voici les coordonées que je trouve (à lire de droite à gauche, est_ce par ce que le programmeur est japonais que ces infos sont envoyés de droite à gauche ?)

    ( '.' = ',')
    coord réelles -- coordonnées reçus par le serveur

    -10000001 -- 81 96 18 cb
    -100000 -- 00 24 74 c9
    -10000 -- 00 50 c3 c7
    -1000 -- 00 40 1c c6
    - 60 -- 00 00 70 c2
    -55 -- 00 00 5c c2
    -19 -- 00 00 98 c1
    -6 -- 00 00 c0 c0
    -0,5 -- 0 0 0 0 bf
    -0,4 -- cd cc cc be
    -0,3 -- 9a 99 99 be
    -0,2 -- cd cc 4c be
    -0,1 -- cd cc cc bd
    -0,05 -- cd cc 4c bd
    -0,04 -- a d7 23 bd
    -0.03 -- 8f c2 f5 bc
    -0.02 -- a d7 a3 bc
    -0,01 -- a d7 23 bc
    0 -- 0
    0,01 -- a d7 23 3c
    0.02 -- d7 a3 3c
    0.03 -- 8f c2 f5 3c
    0.04 -- a d7 23 3d
    0.05 -- cd cc 4c 3d
    0,1 -- cd cc cc 3d
    0,2 -- cd cc 4c 3e
    0,3 -- 9a 99 99 3e
    0,4 -- cd cc cc 3e
    0,5 -- 0 0 0 0 3f
    1 -- 0 0 80 3f
    2 -- 0 0 0 40
    3 -- 0 0 40 40
    4 -- 0 0 80 40
    5 -- 0 0 a0 40
    6 -- 00 00 c0 40
    7 -- 00 00 e0 40
    8 -- 00 00 00 41
    9 -- 00 00 10 41
    10 -- 00 00 20 41
    11 -- 00 00 30 41
    12 -- 00 00 40 41
    13 -- 00 00 50 41
    14 -- 00 00 60 41
    15 -- 00 00 70 41
    16 -- 00 00 80 41
    17 -- 00 00 88 41
    18 -- 00 00 90 41
    19 -- 00 00 98 41
    20 -- 00 00 a0 41
    21 -- 00 00 a8 41
    22 -- 00 00 b0 41
    30 -- 00 00 f0 41
    31 -- 00 00 f8 41
    32 -- 00 00 00 42
    40 -- 00 00 20 42
    41 -- 00 00 24 42
    42 -- 00 00 28 42
    50 -- 00 00 48 42
    51 -- 00 00 4c 42
    52 -- 00 00 50 42
    53 -- 00 00 54 42
    54 -- 00 00 58 42
    55 -- 00 00 5c 42
    60 -- 00 00 70 42
    1000 -- 00 00 7a 44
    10000 -- 00 44 1c 46
    10001 -- 00 44 1c 46
    100000 -- 00 50 c3 47
    100001 -- 80 50 c3 47
    10000000 -- 80 96 18 4b
    10000001 -- 81 96 18 4b

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par vincentweb
    Bonjour
    Je n'ai jamais programmé en C++, je sais juste me débrouiller avec des petits langages (PHP, Python, ...).
    Qu'entends-tu par petit langage??? Troll involontaire?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 54
    Par défaut
    je veux dire par petits langages, des langages faciles à prendre en main, mais qui ne permettent pas de faire autant de choses que d'autres, plus "complet" comme Delphi ou C++ ... enfin c'est ma vision pour l'instant.

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    As tu essayé un crade reinterpret cast ? Si le codage des flottants est le même des deux bouts de la socket, c'est peut-être un truc comme ça qu'a utilisé le développeur initial, d'après sa prose.

    Un truc genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char source[] = {0x9a, 0x99, 0x99, 0xbe};
    float *f = reinterpret_cast<float*> (source);
    cout << *f << endl; // Devrait donner 0.9 d'après le texte du gars.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Je voulais donc savoir comment en C++, la fonction qui permet d'envoyer des nombres à virgules flottante fait pour convertir ces nombres en hexa-ascii pour les envoyer sur un socket ???
    C++ n'a aucune notion de socket ou d'ASCII.
    Il dispose néanmoins de deux types de nombres flottants : float et double.

    Le programme en question utilise probablement le type simple précision de 32 bits de IEEE 754.
    Avec un peu de chance, c'est le même que le type "float" sur ton implémentation.

    Voici les coordonées que je trouve (à lire de droite à gauche, est_ce par ce que le programmeur est japonais que ces infos sont envoyés de droite à gauche ?)
    Rien à voir. C'est parce que les données sont en Little-Endian.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 54
    Par défaut
    MERCI infiniment, c'est ça
    IEEE 754
    conversion pour ceux que ça intéresse :
    http://babbage.cs.qc.edu/IEEE-754/Decimal.html

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

Discussions similaires

  1. Codage d'un "int" passé par un socket
    Par sylvain.cool dans le forum C++
    Réponses: 4
    Dernier message: 11/12/2012, 17h54
  2. Envoyer Objet / Structure par socket TCP
    Par crazy33 dans le forum C++
    Réponses: 5
    Dernier message: 21/11/2010, 20h49
  3. Récuperer données envoyées par un serveur socket
    Par bat2504 dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 27/05/2009, 09h09
  4. deserialisation d'objet envoyé par socket
    Par rhifay dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 27/09/2008, 14h12
  5. envoye fichier par socket
    Par ac/dc dans le forum Réseau
    Réponses: 3
    Dernier message: 01/12/2006, 20h46

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