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

Langage Java Discussion :

XOR en hexa ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut XOR en hexa ?
    salut tout le monde
    je cherche une methode si elle existe déjà ou à faire une fonction qui exor ( XOR ) deux Strings composés des valeurs en hexa ( je sais pas si c'est clair ou pas )
    sinon un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    string ch1 = "123456780000F002"
    string ch2 = "000000000000FF00"
     
    ch1 XOR ch2 = "1234567800000F02"
    merciiiiiiiiiiiiiii

  2. #2
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Ca ça donne quoi ? (pas testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    string ch1 = "123456780000F002";
    string ch2 = "000000000000FF00";
     
    byte[] bytes1 = ch1.getBytes();
    byte[] bytes1 = ch2.getBytes();
    byte[] result = new byte[bytes1.length];
     
    for (int i=0;i<bytes1;i++)
      result[i] = bytes1[i]^bytes2[i];
     
    System.out.println(new String(result));

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut
    merci chtig
    même aprés avoir corriger quelques petite fautes de frape de votre part ( genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] bytes2 = ch2.getBytes();
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] bytes1 = ch2.getBytes();
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i=0;i<bytes1.length;i++)
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i=0;i<bytes1;i++)
    ca me mis une erreure
    Non concordance de types : impossible de convertir de int en byte
    pour cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result[i] = bytes1[i]^bytes2[i];
    t'a pas une idée ? et si ca prend en charge l'hexa ou non ?
    merci encore

  4. #4
    Membre éclairé Avatar de Liquidsoul
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Par défaut
    Citation Envoyé par bwwilly
    ca me mis une erreure

    pour cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result[i] = bytes1[i]^bytes2[i];
    t'a pas une idée ? et si ca prend en charge l'hexa ou non ?
    merci encore
    Salut,

    Si je ne me trompe pas l'opérateur "^" doit certainement te renvoyer un int(32bits) au lieu d'un byte(8bits), donc il te suffit de caster la partie du int qui t'intéresse en byte.
    Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result[i] = (byte)((bytes1[i]^bytes2[i]) & 0xFF);
    Après je ne suis pas sur que le "& 0xFF" soit indispensable.

    J'espère avoir pu aider

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut
    oui merci Liquidsoul j el'ai déjà remarqué et je l'ai ajouté le (byte) mais le code suivant me donne en résultat :

    V
    et même avec
    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
     
    public static void main (String[] args){
    		String varData1, varData2;
    		varData1= "123456780000F002";
    		varData2= "000000000000FF00";
     
    	   	byte[] bytes1 =  (varData1.getBytes());
    		byte[] bytes2 = varData2.getBytes();
    		byte[] result = new byte[bytes1.length];
     
    		for (int i=0;i<bytes1.length;i++)
    			 result[i] =  (byte)(bytes1[i]^bytes2[i]);
     
    		System.out.println( new String(result));
     
    	   }
    c'est bizarre non ? !!

  6. #6
    Membre éclairé Avatar de Liquidsoul
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Par défaut
    Citation Envoyé par bwwilly
    c'est bizarre non ? !!
    Bah moi je dirais que c'est parce que tu espères que la classe String comprenne que ce qu'elle contient est une représentation hexadécimale d'un nombre
    En fait le String.getBytes va te renvoyer l'encodage de tes caractères dans un tableau de bytes. C'est à dire par défaut l'encodage en UTF-8 (si je me trompe pas dans le format par défaut) de ta chaine.
    Donc il va te sortir pour chaque caractère de ta chaine l'encodage en UTF-8.

    Et pour la sortie c'est tout pareil il espère trouver un encodage UTF-8 alors que c'est une modification bit à bit de chacun des bytes initiaux

    Utilise plutôt les fonctions de la classe Integer (enfin suivant l'utilisation que tu veux )

    EDIT: chtig a meme fait la solution

  7. #7
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Oups désolé pour les fautes de frappe j'ai effectivement tapé ça vite et directement sur le forum ...
    Effectivement, je pense un simple cast en byte suffit (tiens, j'ai appris un truc : byte ^ byte -> int ça m'étonne mais bon ...)
    Quant à gérer l'hexa, j'avoue que je ne comprends pas trop .... En fait l'exemple que tu donnais ne présentait pas de cas où tu as deux caractères sans que aucun ne soit 0 ... Donc pour l'instant je ne vois pas le rapport avec l'hexa ...

  8. #8
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Euh ! En fait je suis très bête (forcément que ça ne fonctionne pas ... je sais pas ce que j'avais bu, mais là je prends les octets des caractères dont ca fait totalement n'importe quoi). Je te reposte un truc dans deux min

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

Discussions similaires

  1. conversion : (Ascii en hexa) => nombre
    Par tut dans le forum C++
    Réponses: 3
    Dernier message: 21/04/2004, 15h44
  2. [langage] conversion décimal vers hexa
    Par chipster dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2004, 17h05
  3. technique du XOR
    Par microseb dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/08/2003, 00h55
  4. [débutant] conversion int en hexa
    Par sergoid dans le forum C++Builder
    Réponses: 6
    Dernier message: 16/05/2003, 12h11

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