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

Algorithmes et structures de données Discussion :

Découper en octet une adresse ip


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut Découper en octet une adresse ip
    Bonjour à tous,

    je souhaite mettre en place une fonction qui doit me découper à chaque octet mon adresse de façon à me retrouver avec ceci

    IP = 192.168.1.0

    tableau[0] => 192
    tableau[1] => 168
    tableau[2] => 0
    tableau[3] => 1

    Actuellement j'ai fais ceci, sauriez vous me dire si mon algo est correct ?

    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
    Fonction decoupage_chaine ( ip_reseau : Chaîne ) : Entier
    Variable longeur_chaine , i , j , compteur_nombres : Entier
    Variable tableau_bloc_octet : Chaîne [ 12 ]
    Variable caractere_courant : Chaîne
    Début
      |  j <- 0
      |  longeur_chaine <- LgChaîne ( ip_reseau )
      |  Pour i <- 1 à longeur_chaine Faire
      |    |  caractere_courant <- SousChaîne ( ip_reseau , i , 1 )
      |    |  Si caractere_courant <> "."
      |    |    |  j <- j + 1
      |    |  FinSi
      |    |  Si caractere_courant = "."
      |    |    |  tableau_bloc_octet [ i ] <- SousChaîne ( ip_reseau , j , i )
      |    |    |  Afficher ( tableau_bloc_octet [ i ] )
      |    |  FinSi
      |    |  
      |  FinPour
    Fin


    Si non, que ferriez vous pour l'améliorer ?
    Merci par avance !

  2. #2
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut
    J'ai modifié mon algo afin de sortir convenablement mes blocs d'octets, mon seul soucis est que la fonction DébutChaine me tronque mon premier bloc d'octets

    Sauriez vous m'indiquer une potentielle solution à ce problème ?


    Avec l'algo ci-dessous j'obtiens en sortie, j'ai mon deuxième bloc d'octets qui est tronqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Debut chaine :4 ->192
    FinChaine N :4 ->1.0


    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
     
    Variable ip_reseau : Chaîne
    Variable rez : Entier
     
    Début
      |  ip_reseau <- "192.168.1.0"
      |  rez <- decoupage_chaine ( ip_reseau )
    Fin
     
     
    Fonction decoupage_chaine ( ip_reseau : Chaîne ) : Entier
    Variable longeur_chaine , i , compteur : Entier
    Variable caractere_courant , debut_chaine , fin_chaine , octet : Chaîne
    Variable tableau_octets : Chaîne [ 99 ]
    Début
      |  compteur <- 0
      |  longeur_chaine <- LgChaîne ( ip_reseau )
      |  Pour i <- 1 à longeur_chaine Faire
      |    |  caractere_courant <- SousChaîne ( ip_reseau , i , 1 )
      |    |  Si caractere_courant <> "."
      |    |    |  compteur <- compteur + 1
      |    |  FinSi
      |    |  Si caractere_courant = "."
      |    |    |  octet <- DébutChaîne ( ip_reseau , compteur )
      |    |    |  Afficher ( "Debut chaine :" & i & " ->" & octet )
      |    |    |  ip_reseau <- FinChaîne ( ip_reseau , compteur )
      |    |    |  Afficher ( "FinChaine N :" & i & " ->" & ip_reseau )
      |    |    |  compteur <- 0
      |    |  FinSi
      |  FinPour
    Fin

  3. #3
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Salut,

    Ne peux-tu pas tout simplement utiliser les fonctions sur les chaine déjà présentes dans de nombreux languages? Queque chose comme: maChaine.split(".")
    Si tu souhaite coder ta propre fonction decoupage_chaine, alors utilise split pour vérifier que les retours de ta fonction sont corrects.

  4. #4
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut
    Il n'existe pas à ma connaissance de fonction split en algorithmique, je dois faire cette algo en langage algorithmique c'est pour ca que j'ai quelques difficultées

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Alors tu fais une fonction "Cherche-Caractère".


    Tu chercheras soit le point soit la fin de chaine. Tu stockeras l'adresse où tu es au départ, et celle du caractère (-1). Et tu auras une fonction "Lit-Chaine" qui ressortira un entier..

    En C, l'équivalent est via strtok et sscanf...

  6. #6
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut
    J'ai essayé d'appliquer l'idée que tu m'as donné. Le problème est que je ne peux retourner qu'un seul argument dans une fonction algoritmique

    Je retourne donc bien mon octet, mais comment mettre à jour mon adresse ip pour signifier que le premier bloc d'octets est traité ?

    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
     
     
    Variable ip_reseau , ip_octet1 : Chaîne
    Variable rez : Entier
     
    Début
      |  ip_reseau <- "188.168.10.0"
      |  ip_octet1 <- octet_1 ( ip_reseau )
      |  Afficher ( ip_octet1 )
    Fin
     
     
    Fonction octet_1 ( ip_reseau : Chaîne ) : Chaîne
    Variable longeur_chaine , i , compteur , longeur_octet : Entier
    Variable caractere_courant , octet : Chaîne
    Début
      |  compteur <- 0
      |  longeur_chaine <- LgChaîne ( ip_reseau )
      |  i <- 0
      |  TantQue i < longeur_chaine Faire
      |    |  caractere_courant <- SousChaîne ( ip_reseau , i , 1 )
      |    |  Si caractere_courant = "."
      |    |    |  octet <- DébutChaîne ( ip_reseau , i - 1 )
      |    |    |  longeur_octet <- LgChaîne ( octet )
      |    |    |  ip_reseau <- FinChaîne ( ip_reseau , longeur_chaine - longeur_octet )
      |    |    |  i <- longeur_chaine
      |    |  FinSi
      |    |  i <- i + 1
      |  FinTantQue
      |  Retourner ( octet )
    Fin

Discussions similaires

  1. Réponses: 15
    Dernier message: 25/07/2013, 15h42
  2. Découper une adresse
    Par PIEPLU dans le forum Langage
    Réponses: 16
    Dernier message: 23/04/2012, 14h33
  3. Comment découper une adresse postale en plusieurs parties
    Par arnaudperfect dans le forum Langage
    Réponses: 12
    Dernier message: 18/08/2008, 23h31
  4. commande dos pour résoudre une adresse ip
    Par stephy dans le forum Développement
    Réponses: 2
    Dernier message: 17/12/2002, 14h04
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26

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