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

Android Discussion :

string reprensenté en HEXA ( difficile de mettre un titre là dessus en vrai)


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur Tests et Validations
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur Tests et Validations
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Points : 10
    Points
    10
    Par défaut string reprensenté en HEXA ( difficile de mettre un titre là dessus en vrai)
    Bonjour messieurs, dames,

    /ATTENTION , DIFFICILE À EXPLIQUER\

    Dans les grandes lignes:
    Je dois piloter un robotino (robot pédagogique).
    On peut envoyer à ce robot des trame UDP.
    Actuellement , je sais le faire en python. C'est à dire que j'envoie la trame que je veux, ça fonctionne très bien.
    En revanche le faire depuis un programme Java : non .

    Nom : Générateur de trame.png
Affichages : 312
Taille : 10,1 Ko

    ici vous avez la petite application graphique que j'ai écrite en python.
    Elle me permet d'envoyer les valeurs que je veux sur les entrées du robot que je veux.
    -Si j’appuie sur conversion, mes valeurs sont converties en une trame interprétable par le robot qui s'affiche dans le champ juste en bas.
    -Si j’appuie sur envoi, mes valeurs sont converties en une trame interprétable par le robot et sont réellement envoyé au serveur du robotino.

    Et donc tout ceci est fonctionnel.
    La fonction conversion me permettait de copier le champ et de faire ceci en python:
    MESSAGE = "\x00\x24\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    monSocket.sendto(MESSAGE, (UDP_IP, UDP_PORT_EMISSION))

    Enfin Bref !
    Je souhaite faire ça en java (pour une app android). Mais non, ça ne marche pas.

    J'ai crée (copié un code) d'un serveur UDP en java. Il marche.
    Je peux envoyer une phrase du genre "bonjour" depuis mon app android
    Nom : bonjour.png
Affichages : 352
Taille : 40,4 Ko

    Maintenant je voudrais que lorsque j'envoie ma trame soit depuis mon app ANDROID ça m'affiche la même chose que depuis mon programme python. ( une image sera BEAUCOUP PLUS CLAIRE
    Nom : ideal.png
Affichages : 270
Taille : 12,3 Ko

    Voici une partie du code actuel, je vous fais grâce du reste qui ne sera pas utile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    private void runUdpClient()
    {
            async_cient = new AsyncTask<Void, Void, Void>() 
            {
                @Override
                protected Void doInBackground(Void... params)
                {
                    //String udpMsg = "x00x24\x00\x77\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";                
                    //String udpMsg = "002400776400000000000000000000000000000000000000000000000000000000000000";
                    //String udpMsg = "002400a90000000000000000320000000000000000000000000000000000000000000000";
                    //String udpMsg= "002400db0000000000000000000000000000000000000000000000000000000000000000";
                    //String udpMsg = "\0x00\0x24\0x00\0xdb\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00";
                    //String udpMsg = "\\x00\\x24\\x00\\xdb\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00";
                    //String udpMsg= "0x00,0x24,0x00,0xA9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00";
                    String udpMsg="bonjour";
     
                    DatagramSocket ds = null;
                    try 
                    {
                        ds = new DatagramSocket();
                        //InetAddress serverAddr = InetAddress.getByName("10.117.221.144"); // IP IUT
                        InetAddress serverAddr = InetAddress.getByName("192.168.1.36"); // IP MAISON
                        DatagramPacket dp;
                        dp = new DatagramPacket(udpMsg.getBytes(), udpMsg.length(), serverAddr, 9182);
                        ds.send(dp);
                    }
     
                    catch (Exception e)
                    {
                        Log.e("UDPTest", "Problème d'envoi datagram", e);
                    }
                    return null;
            }
     
                protected void onPostExecute(Void result) 
                {
                    super.onPostExecute(result);
                }
    };
    Et donc pour faire au plus simple j'aimerais que cette trame, envoyé depuis mon app Android, "\x00\x24\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" m'affiche "$ Û" sur mon serveur. Comme le fait mon programme python.
    Donc la question comment dois modifier et/ou traiter cette trame sous Java ?

    Voilà, je sais que c'est très difficile à comprendre quand on est pas dans le truc. Alors je reste à votre disposition pour plus d’éclaircissements.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il faudrait savoir quelle forme doit avoir cette trame exactement.

    Je ne sais pas ce qu'il en est en Python, mais s'il faut envoyer une série de byte je doute qu'une String soit adapté.
    getByte() renvoit un tableau dépendant de l'encodage du système, ce qui pourrait aboutir à des transformations...


    Si ta trame correspond à une série de byte représenté par les valeurs en question, il serait préférable d'utiliser directement un tableau de bytes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] data = { 0x00, 0x24, 0x00, 0xdb, 0x00, 0x00 ... };

    a++

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur Tests et Validations
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur Tests et Validations
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    il serait préférable d'utiliser directement un tableau de bytes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] data = { 0x00, 0x24, 0x00, 0xdb, 0x00, 0x00 ... };

    a++
    Salut, tout d'abord, merci de ta réponse.
    Ensuite pour le tableau de byte, j'ai essayé ce que tu as dis mais pour la valeur 0xA9 (d'une autre trame) ne passe pas.
    Mon IDE Android studio me dit qu'il attend un byte alors qu'il voit un int.

    J'essais ce soir de mettre le tableau qui décrit comment est foutu la trame. Peut être ça vous aidera.
    Le but de cette trame est d'envoyer des valeurs , pas des caractères.

    Bonne journée.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est parce que 0xA9 n'est pas un byte (un byte est compris entre -128 et 127 et 0xA9 vaut 169).

    Tu peux t'en sortir en castant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] data = { 0x00, 0x24, 0x00, (byte)0xA9, 0x00, 0x00 };
    Mais ça peut devenir fastidieux si le nombre de valeurs est important.

    Tu peux éventuellement utiliser une méthode de conversion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private static byte[] toByteArray(int...vals) {
        byte[] bvals = new byte[vals.length];
        for(int i=0; i<vals.length; i++) {
            bvals[i]=(byte)(vals[i]&0xFF);
        }
        return bvals;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] data = toByteArray(0x00, 0x24, 0x00, 0xA9, 0x00, 0x00);
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur Tests et Validations
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur Tests et Validations
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Jackpot,

    Merci la fonction tobytearray marche nickel.

    Nom : Jackpot.png
Affichages : 249
Taille : 13,4 Ko

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

Discussions similaires

  1. Indiquer que mon string est un hexa
    Par bastou93 dans le forum Général Python
    Réponses: 2
    Dernier message: 13/02/2014, 10h31
  2. Afficher un string en format Hexa sur une Windows Form
    Par gabouche dans le forum C++/CLI
    Réponses: 3
    Dernier message: 07/06/2012, 13h30
  3. Réponses: 11
    Dernier message: 02/09/2009, 11h06
  4. [VS 2003] [VB.net] Conversion string to Int32 = hexa ?
    Par babeu dans le forum Windows Forms
    Réponses: 5
    Dernier message: 01/08/2006, 18h03
  5. Réponses: 4
    Dernier message: 02/02/2006, 18h13

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