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 :

Convertir adresse IP en byte


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Par défaut Convertir adresse IP en byte
    Bonjour à tous,

    voilà mon problème : j'ai une String qui contient une adresse IP.
    et je voudrais récupérer chaque octet dans un tableau de byte[].

    Exemple :

    String IPAddress = "139.54.87.98";

    byte[] buf = new byte[4];
    buf[0]=(byte) 0xB8;
    buf[1]=(byte) 0xD2;
    buf[2]=(byte) 0x78;
    buf[3]=(byte) 0x87;

    Je dois donc découper ma chaine entre le caractère "."
    puis convertir en hexa et rajouter "0x" devant.

    Voilà donc ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    StringTokenizer st = new StringTokenizer(sourceIPAddress, ".");	
    String octet4 =  "0x" + Integer.toHexString(Integer.parseInt(st.nextToken()));
    String octet3 =  "0x" + Integer.toHexString(Integer.parseInt(st.nextToken()));
    String octet2 =  "0x" + Integer.toHexString(Integer.parseInt(st.nextToken()));
    String octet1 =  "0x" + Integer.toHexString(Integer.parseInt(st.nextToken()));
    Le problème est qu'ensuite, je ne peux pas caster un String en byte.
    Je ne vois pas comment faire.

    Merci pour votre aide.

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut
    Passe plutot de l'entier vers un Byte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Byte monByte = (byte) Integer.parseInt(token)
    où token est une partie de ton adresse.
    Et attention aux limites : gère les exception.

  3. #3
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut
    Hello,

    Les Byte permettent de stocker des valeurs -> 127, donc ça ne suffit pas pour une IP.

    Utilise de Short
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String ad = "10.192.73.158";
    String[] arr = ad.split("\\.");
    Short[] arrB = new Short[arr.length];
    for(int i=0;i<arr.length;i++){
      arrB[i]=Short.valueOf(arr[i]);
    }
    A+

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut
    Citation Envoyé par ploxien

    Les Byte permettent de stocker des valeurs -> 127, donc ça ne suffit pas pour une IP.
    Ok, mais les bits des Bytes créés sont bien positionnés (donc utilisable comme masque...), mais c'est sûr à l'affichage (ou après conversion), la valeur max est 127, mais si on considère les bytes non signés, les valeurs sont bonnes.

  5. #5
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    La classe InetAddress propose tout ce qu'il faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	InetAddress address = InetAddress.getByName("139.54.87.98");
    	byte[] ip = address.getAddress();
    a++

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Par défaut
    Merci pour vos réponses.

    la classe InetAddress ne fait pas ce que je veux.
    j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    InetAddress address = InetAddress.getByName("139.54.87.98");
    byte[] ip = address.getAddress();
    System.out.println(ip[0]);
    System.out.println(ip[1]);
    System.out.println(ip[2]);
    System.out.println(ip[3]);
    et j'obtiens :

    -117
    54
    87
    98

    alors que je veux : (de l'hexa avec "0x" devant)

    0x8B
    0x36
    0x57
    0x62


    Si j'utilise plutôt la conversion entier->byte,
    j'ai une NumberFormatException à cause du "0x".

    Please help.

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut
    Dans ce cas là:
    nombre par nombre (donc 4 fois), tu fais :
    Integer.toHexString(<mon nombre>)

    et tu rajoutes "ox" devant si beoin.

    Et la conversion inverse est :
    Integer.valueOf(<ma chaine en hexa>,16);

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Par défaut
    Ben c'est ce que j'ai fait mais j'ai une NumberFormatException :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    StringTokenizer st = new StringTokenizer("139.54.87.98", ".");	
    int octet4 =  Integer.parseInt("0x" + Integer.toHexString(Integer.parseInt(st.nextToken())));
    int octet3 =  Integer.parseInt("0x" + Integer.toHexString(Integer.parseInt(st.nextToken())));
    int octet2 =  Integer.parseInt("0x" + Integer.toHexString(Integer.parseInt(st.nextToken())));
    int octet1 =  Integer.parseInt("0x" + Integer.toHexString(Integer.parseInt(st.nextToken())));
     
    byte[] buf = new byte[4];
    buf[0]=(byte) octet1;
    buf[1]=(byte) octet2;
    buf[2]=(byte) octet3;
    buf[3]=(byte) octet4;

  9. #9
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par adn013
    et j'obtiens :

    -117
    54
    87
    98

    alors que je veux : (de l'hexa avec "0x" devant)

    0x8B
    0x36
    0x57
    0x62
    Les types primitifs représentent des valeurs numériques, mais ne sont pas associé à une base spécifique (enfin en mémoire elles sont en base 2 quand même).
    Ce n'est que lorsque tu représentes ces valeurs que tu leurs affectes une base (base 8, base 16, etc.), et par défaut la base 10 bien sûr...

    Ainsi ce code ne sert à rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int octet4 =  Integer.parseInt("0x" + Integer.toHexString(Integer.parseInt(st.nextToken())));
    Car il peut se limiter à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int octet4 =  Integer.parseInt(st.nextToken());
    En effet cela ne sert à rien de formatter un nombre en String pour le remettre en nombre...


    Bref ton problème n'est qu'un problème d'affichage...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	InetAddress address = InetAddress.getByName("139.54.87.98");
    	byte[] ip = address.getAddress();
     
    	System.out.printf("%#x %#x %#x %#x %n", ip[0], ip[1], ip[2], ip[3] );
    a++

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Par défaut
    ok.

    merci à tous pour votre aide.

    a++

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

Discussions similaires

  1. convertir un long en byte[]
    Par le y@m's dans le forum Langage
    Réponses: 11
    Dernier message: 02/11/2005, 18h56
  2. [Question] Convertir un String en Byte
    Par WyckiT dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2005, 12h50
  3. [C#] Convertir un tableau de byte en Image
    Par goulhasch dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/01/2005, 10h12

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