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

Java Discussion :

équivalent fonction bin2hex (php)


Sujet :

Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut équivalent fonction bin2hex (php)
    Bonjour à tous,

    J'ai besoin d'une moulinette qui fasse ceci en JAVA.
    Es-ce qu'une âme charitable pourrait m'indiquer ou je peux touver un script de ce genre ? (ça fait 10 ans que je ne code plus en JAVA et c'est un besoin hyper ponctuel )

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            String bin = "10000000";
            int val = Integer.parseInt(bin, 2);
            String hex = Integer.toString(val, 16);
     
            System.out.println("Valeur en Binaire : "+bin);
            System.out.println("Valeur en Hexadecimal : "+hex);
    et voila la valeur la console

    Valeur en Binaire : 10000000
    Valeur en Hexadecimal : 80

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            int valdec = 27;
     
     
            System.out.println("Valeur en Binaire : "+Integer.toString(valdec, 2));
            System.out.println("Valeur en Hexadecimal : "+Integer.toString(valdec, 16));
    resultat :
    Valeur en Binaire : 11011
    Valeur en Hexadecimal : 1b
    en fait la fonction toString de la class Integer permet de définir la basse de sortie

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut
    hello rolfone, merci de ton aide. En fait je doit convertir une string et non un integer en entrée ...

    entrée
    "On-line Testing Pages by dev.FYIcenter.com
    Welcome to dev.FYIcenter.com on-line learning and testing pages."

    sortie "4F6E2D6C696E652054657374696E67205061676573206279206465762E46594963656E7465722E636F6D0D0A57656C636F6D6520746F206465762E46594963656E7465722E636F6D206F6E2D6C696E65206C6561726E696E6720616E642074657374696E672070616765732E"

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    C'est un peu plus compliqué que ça : l'exemple qu'il donne convertit une String en binaire, puis écrit le binaire en hexa.

    commons-codec propose ça. Mais c'est assez facile à faire soi-même.

    Convertir une chaîne en binaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // windows-1252 est le nom du charset dérivé de latin-1 utilisé par Windows.
    // Un autre charset souvent utilisé est utf-8
    byte[] bytes = "Ma chaîne".getBytes("windows-1252");
    Écrire du binaire en hexa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    char[] hexDigits = {'0', '1', ..., 'f'};
     
    char[] chars = new char[bytes.length*2];
    for(int i = 0; i < bytes.length; i++) {
      chars[2*i] = hexDigits[(bytes[i] >> 4) & 0xF];
      chars[2*i+1] = hexDigits[bytes[i] & 0xF];
    }
     
    String hex = new String(chars);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    byte[] bytes = laString.getBytes("UTF-8");
    StringBuilder b = new StringBuilder();
    Formatter f = new Formatter();
    for (byte b : bytes) 
       f.format("%02Xd",b)
    System.out.println(b.toString());

    windows-1252 est à déconseillé, tu n'a aucune garantie qu'il sera disponible sur la machine de destination de l'application, autant préférer UTF-8 ou ISO-8859-1 que toutes les JVM doivent fournir.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut
    tchize_, thelvin merci pour le coup de pouce je vais tester ça dans l'aprèsm.

    Bonne journée

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut
    Re ...

    j'ai donc testé le code de thelvin dans ma JSP de test ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <%!
    public String bin2hex(String s){
    		byte[] bytes = s.getBytes("utf-8");
    		char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
    		char[] chars = new char[bytes.length*2];
    		for(int i = 0; i < bytes.length; i++) {
    		  chars[2*i] = hexDigits[(bytes[i] >> 4) & 0xF];
    		  chars[2*i+1] = hexDigits[bytes[i] & 0xF];
    		}
    		String hex = new String(chars);
    		return hex;
    	}
    %>
    tomcat me retoune Unhandled exception type UnsupportedEncodingException
    pour la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    byte[] bytes = url.getBytes("utf-8");
    j'ai testé d'autre encodage mais c'est pareil ...

    Pour le script de tchize_ c'est pareil au niveau de l'appel à la fonction getBytes ... le code m'échappe un peu à vrai dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public String bin2hex(String s){
    byte[] bytes = s.getBytes("UTF-8");
    StringBuilder b = new StringBuilder();
    Formatter f = new Formatter();
    for (byte c : bytes) 
       f.format("%02Xd",c)
    System.out.println(b.toString());

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par popovitch130 Voir le message
    tomcat me retoune Unhandled exception type UnsupportedEncodingException
    pour la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    byte[] bytes = url.getBytes("utf-8");
    j'ai testé d'autre encodage mais c'est pareil ...
    Euh oui, c'est normal. Il suffit de l'entourer d'un try/catch. C'est une erreur de compilation, tu peux même mettre le peu connu charset "tralalalalère", l'erreur sera la même. (Par contre, celui-là générera une erreur au runtime, après que tu aies corrigé l'erreur de compilation.)

    Au passage, coder directement dans une JSP est assez obsolète -_-°.

    Pour le script de tchize_ c'est pareil au niveau de l'appel à la fonction getBytes ... le code m'échappe un peu à vrai dire
    C'est dommage qu'il t'échappe, car il est plus clair et moins sujet aux bugs que le mien.
    J'oublie toujours de me servir de String.format() pour faire de l'hexa, mais c'est encore le plus simple.

    En gros, il crée un StringBuilder vide, puis pour chaque octet, il formate cet octet en un nombre hexadécimal non signé de 2 chiffres, paddé avec un zéro si besoin, puis il concatène le résultat à la fin du StringBuilder. Simple et direct.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par popovitch130 Voir le message
    tomcat me retoune Unhandled exception type UnsupportedEncodingException
    pour la ligne
    Tu ne gère pas (via un try/catch) cette exception -> erreur de compilation
    le code m'échappe un peu à vrai dire
    il suffit de lire la doc des classes concenées pour l'explication.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Par défaut
    ça fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public String bin2hex(String url){
    		byte[] bytes;
    		try{
    			bytes = url.getBytes("utf-8");
     
    			StringBuilder b = new StringBuilder();
    			Formatter f = new Formatter();
     
    			for (byte c : bytes) 
    			   f.format("%02X",c);   // pas %02Xd
     
    			return (f.toString());     // f et non b
    		}catch(Exception e){return "BUG";}
    	}
    Merci du coup de pouce

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    }catch(Exception e){return "BUG";}
    Mon Dieu que c'est moche

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

Discussions similaires

  1. équivalence fonction de saisie c,c++ et php console
    Par vacknov dans le forum Langage
    Réponses: 3
    Dernier message: 10/10/2007, 15h16
  2. [FLASH MX] Problème flash et fonction mail() php
    Par proutcore dans le forum Flash
    Réponses: 7
    Dernier message: 21/05/2007, 12h21
  3. équivalent fonction mysql C en php
    Par splouf dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 22/01/2006, 19h41
  4. équivalent fonction mysql C en php
    Par splouf dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 13/01/2006, 14h23
  5. [Débutant] équivalent du include() php
    Par R3iTt0R dans le forum ASP
    Réponses: 5
    Dernier message: 07/07/2004, 11h46

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