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 :

Afficher le code ASCII des caractères d'un texte


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 2
    Par défaut Afficher le code ASCII des caractères d'un texte
    Bonjour à tous !
    J'essaye de créer une application de codage sur android...
    Pour cela, je souhaiterais récupérer le code ascii de chacune des lettres entrées par l'utilisateur.
    Je fais des programmes tests avec Android Studio, et dans celui-ci, je voulais que l'utilisateur entre son texte, puis qu'un toast affiche les codes ascii de tous les caractères entrés lorsqu'on appuie sur le bouton fini.
    Android Studio ne me met aucune erreur, mais pourtant mon appli ne tourne pas sur mon téléphone... Je ne comprends vraiment pas d'où vient le problème...

    Voici mon code :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    package test.testapp1;
     
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Button;
    import android.widget.Toast;
     
     
    public class MainActivity extends ActionBarActivity {
     
        private Button BoutonFin;
        private EditText MytextEditText;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            BoutonFin = (Button) findViewById(R.id.Button);
            MytextEditText = (EditText) findViewById(R.id.EditText);
        }
     
     
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
     
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
     
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
     
            return super.onOptionsItemSelected(item);
        }
     
        public void onButtonClick(View view) {
     
            String Mytext = String.valueOf(MytextEditText.getText());
            String Affichage = " ";
            int c = MytextEditText.getText().toString().length();
            for (int i=0; i<=c ; i++){
     
                char charac = Mytext.charAt(i);
                String charac2 = String.valueOf(charac);
                int charac3 = Integer.parseInt(charac2);
                String characfin = String.valueOf(charac3);
     
                Affichage = Affichage + characfin;
     
            }
     
            Toast.makeText(this, Affichage, Toast.LENGTH_SHORT).show();
     
        }
    }
    Si quelqu'un pouvait me dire d'où vient le problème... Merci d'avance !

    Lulye

  2. #2
    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
    Déjà... le code "ASCII" d'un caractère... pas sur qu'il existe...

    Ensuite, essayer de respecter les "normes" java: les noms de variables / fonctions commencent par une minuscule... seuls les noms de type (classes, interfaces, enum) commencent par une majuscule.

    Android Studio ne me met aucune erreur, mais pourtant mon appli ne tourne pas sur mon téléphone... Je ne comprends vraiment pas d'où vient le problème...

    Android Studio ne met aucune erreur ça veut dire que le code java est correct, pas que l'algorithme est correct.
    "Ne tourne pas sur mon téléphone" ne veut rien dire...
    * L'application s'est arrêté ? (c'est probablement le cas, dû à un NumberFormatException, il faut regarder le logcat en mode debug donc)
    * L'application ne fait rien ?
    * L'application ne s'installe pas ?

    Après pour le code decrypté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String Mytext = String.valueOf(MytextEditText.getText());
    On n'utilise jamais de "String"... juste des "CharSequence", inutile de passer du temps à transformer en string donc...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String Affichage = " ";
    La on imagine qu'on va rajouter des trucs au fur et à mesure... Dans ce cas, préférer un StringBuilder.... String = String + toto revient à créer à chaque fois un StringBuilder temporaire (le compilateur java fait la transformation tout seul).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int c = MytextEditText.getText().toString().length();
    On l'avait déjà dans MyText ! MyText.length();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (int i=0; i<=c ; i++){
        char charac = Mytext.charAt(i);
        String charac2 = String.valueOf(charac);
    charac2 n'est pas un caractère mais une string... ne devrait donc pas s'appeler charac2. De puis... autant faire: charac2 = MyText.substring(i,i); Ca permet de pointer sur le même buffer (et donc aucune duplication en mémoire).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        int charac3 = Integer.parseInt(charac2);
    La on considère que charac2 est un entier représenté sous forme de chaine (par exemple "812") et on essaye de récupérer l'entier initial... la valeur du caractère on l'avait déjà dans "charac"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        String characfin = String.valueOf(charac3);
    Ben c'est *exactement* l'opération inverse de l'opération précédente... sauf qu'on aura probablement des NumberFormatException
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Affichage = Affichage + characfin;
    }
    Et voilà pour le string builder....


    Déjà il faut déterminer ce qu'on veut faire exactement. Veut on afficher uniquement les caractères "ASCII" ?
    Par exemple '€' n'est pas un caractère ASCII.

    Si l'important est "ASCII" alors il faut certainement faire une transformation préalable en ASCII:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String s;
    byte[] bytes = s.getBytes("US-ASCII");
    Attention tous les caractères ne seront pas représentés correctement (tous les caractères ne sont pas disponibles en ASCII).

    Si l'important est l'hexadécimal "court", le choix d'UTF-8 est probablement plus approprié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String s;
    byte[] bytes = s.getBytes("UTF-8");
    "char" est un caractère en java. N'importe quel caractère dans le monde. Peut importe sa représentation interne, celle-ci est "cachée" (pas beaucoup)... mais toute transformation d'un char en autre chose (sauf en string) est probablement une erreur de programmation.

    Je pense que ce que vous vouliez avoir c'était un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String myText = MytextEditText.getText().toString(); // <= minuscule !
    byte[] utf8Text = myText.getBytes("UTF-8");
    StringBuilder affichage = new StringBuilder();
    for (byte b : utf8Text) 
        affichage.append(String.format("%02x", b));
    Toast.makeText(this, affichage.toString(), Toast.LENGTH_SHORT).show();

    Pourquoi passer par String.format ? et non toHexString par exemple ?
    String.format permet de spécifier: 2 chiffres hexadécimaux ni plus ni moins, alors que toHexString peut n'en retourner qu'un... sans compter les soucis de signe....

Discussions similaires

  1. Codes ASCII des fleches directionelles?
    Par H-raf dans le forum C
    Réponses: 15
    Dernier message: 30/05/2008, 10h28
  2. Petit utilitaire pour retrouver les codes ascii des fontes
    Par ProgElecT dans le forum Vos contributions VB6
    Réponses: 0
    Dernier message: 26/07/2007, 22h52
  3. Transformer le code ascii en caractère
    Par Death83 dans le forum C++
    Réponses: 4
    Dernier message: 28/11/2006, 17h10
  4. transcoder des codes ascii en caractères
    Par gillou026 dans le forum Langage
    Réponses: 6
    Dernier message: 06/03/2006, 09h25

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