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 :

Format d'envoi de trame


Sujet :

Android

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 13
    Par défaut Format d'envoi de trame
    Bonjour à tous.

    Je commence a développé une application sous java et j'ai un problème.
    Je souhaite transmette la valeur 255 mais le type byte[] est compris entre -128 et 127!
    Quelqu'un aurait il une solution à ce probleme??
    Voici un bout de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                   String chaine0=new Character((char)255).toString();
    		String chaine1=new Character((char)0).toString();
    		String chaine2=new Character((char)0).toString();
    		String chaine3=new Character((char)1).toString();
    		String chaine4=new Character((char)0).toString();
    		String chaine5=new Character((char)67).toString();
     
    byte[] s=( chaine0 +chaine1+chaine2+chaine3+chaine4+chaine5).getBytes();
    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 141
    Par défaut
    Déjà sache que l'encodage est l'une des plus grandes problématiques de l'informatique.

    Pour résoudre ton problème tu dois répondre à 2 questions :

    - sous quelle forme récupères-tu ta fameuse valeur ?
    - à qui est elle destinée ?

    la première question permet de connaître le format d'origine de la donnée.
    la seconde, permet de déterminer si éventuellement tu doit ré-encoder la valeur on parle de transcodage.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    unsigned byte ?

    Non sans déconner.... -1 et 255 sur un octet c'est pareil hein ?

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 13
    Par défaut
    bonjour,tout d'abord merci de répondre à mon problème.

    La trame que j'envoie est destinée à un microcontroleur qui possède un programme qui va extraire les octets que je lui envois( la trame quoi).
    Cependant je ne dois pas le modifier!

    Le µC doit recevoir une chaîne de caractère ayant comme première valeur 255 (soit 11111111).
    Le probleme est que j'utilise la fonction m_btSck.getOutputStream().write(s); qui peut envoyer qu'un type byte[] et ce type ne peut pas envoyé une valeur superieur à 127!

    La solution d'envoyé -1 ne fonctionne pas car ça code -1 sur 2 octets.

    Donc je voudrais savoir soit s'il existe une autre fonction qui permette l'envoie d'une chaîne de caractère (string), soit quelle est la valeur sur 1 octet qui enverra 11111111.

    J’espère avoir été assez clair sur mon problème et attend une suggestion de votre part

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    byte toto = -1

    toto ne sera jamais codé sur 2 octets, ou alors il y a un gros gros gros probleme !!!

    0x00 = 0
    0x7F = 127
    0x80 = 128 (unsigned) et -128 (signed)
    0xFF = 255 (unsigned) et -1 (signed)


    byte = octet
    char = caractère UTF-16, soit 2 octets *au moins* (un char peut faire jusqu'à 4 octets).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                   String chaine0=new Character((char)255).toString();
    		String chaine1=new Character((char)0).toString();
    		String chaine2=new Character((char)0).toString();
    		String chaine3=new Character((char)1).toString();
    		String chaine4=new Character((char)0).toString();
    		String chaine5=new Character((char)67).toString();
     
    byte[] s=( chaine0 +chaine1+chaine2+chaine3+chaine4+chaine5).getBytes();
    veut dire:
    Je prend le caractère 255 (~ si je ne m'abuse) et je le convertit en chaine donc: 0x00 0xFF
    etc...
    Le getBytes() à la fin demande à avoir la représentation en octets de la chaine (il doit d'ailleurs prendre un 'codepage' qui indique comment traduire la chaine en octets), et donc tu vas avoir: 0x00 0xFF et c'est tout !
    Pourquoi ? parceque la chaine va s'arrêter au premer caractère nul (marque de fin de chaine) rencontré....

    Le plus simple est toujours le mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    byte [] myBytes = { -1, 0, 0, 1, 0, 67 };
    outputStream.write(myBytes);
    Je pense qu'il va falloir que tu regardes un peu comment sont codé les choses (nombres / caractères) dans un ordinateur tout de même... Dès qu'on touche aux octets cela devient quasi obligatoire.

Discussions similaires

  1. Problème d'envoi de trames
    Par skeltryx dans le forum Langage
    Réponses: 2
    Dernier message: 22/03/2007, 15h16
  2. Problème d'envoi de trames
    Par skeltryx dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 22/03/2007, 14h14
  3. Y a t'il envoi de trame beacon dans un réseau adhoc
    Par Kingdomofh dans le forum Développement
    Réponses: 3
    Dernier message: 20/03/2007, 20h17
  4. Réponses: 3
    Dernier message: 28/06/2006, 16h13
  5. Problème de récéption ou d'envoi de Trame UDP
    Par sniperseb dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 10/04/2006, 23h11

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