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

C Discussion :

Manipulation des adresses


Sujet :

C

  1. #1
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut Manipulation des adresses
    Bonjour

    Je souhaite manipuler une adresse mémoire, c'est à dire la faire évoluée dans une boucle.

    Par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char adr = "\x00\x00\x00\x00";
     
    tant que ( strcmp(adr,"\xff\xff\xff\xff\xff") != 0 )
      incremente adr
    adr prenant donc les valeurs :
    \x00\x00\x00\x00
    \x01\x00\x00\x00
    \x02\x00\x00\x00
    ...
    \x0f\x00\x00\x00
    \x10\x00\x00\x00
    ...
    ...
    \xff\xff\xff\xff
    Voilà je ne vois pas trop comment procédé
    Je ne trouve pas non plus comment afficher adr avec printf afin de controler mon incrementation, du coup ça n'est vraiment pas evident

    Merci pour votre aide
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 136
    Points : 100
    Points
    100
    Par défaut
    Salut,

    Je ne vois pas vraiment ce que tu veux faire. Est ce que c'est un pointeur que tu veux faire évoluer ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Salut, si tu veux "incrémenter" une adresse mémoire, tu peux peut-être utiliser l'arithmétique sur les pointeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char * p ="tititototata";
    printf("%s\n",p);
    p++;
    printf("%s\n",p);
    mais je ne suis pas sûr que ça réponde à ta question...

  4. #4
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Je veux en une incrementation, passer de l'adresse 0x00000000 à l'adresse 0x00000001

    Je vais essayer avec les pointeurs
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par sorry60
    Je veux en une incrementation, passer de l'adresse 0x00000000 à l'adresse 0x00000001

    Je vais essayer avec les pointeurs
    L'incrémentation agira en conséquence de la taille du type utilisé ou sur lequel tu pointes. J'aurais bien dit "Manipulation de bits" mais je ne suis pas trop sûr, cela agit sur le contenu de la variable non sur l'adresse il me semble.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 136
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par Franck.H
    L'incrémentation agira en conséquence de la taille du type utilisé ou sur lequel tu pointes. J'aurais bien dit "Manipulation de bits" mais je ne suis pas trop sûr, cela agit sur le contenu de la variable non sur l'adresse il me semble.
    voila un code qui confirme ça

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        int i = 1;
    	int * ptr_i = &i;
     
     
    	//affichage de l'adresse de l'entier i
    	printf("\n ptr_i == %p\n", ptr_i);
     
    	// incrémentation de l'adresse
    	int * ptr = ptr_i + 1;
    	// Disons que c'est la case mémoire après l'adresse de i
     
    	printf("\n ptr == %p\n", ptr);
     
     
     
     
     
    	return 0;
    }

    Si tu veux incrémenter l'adresse de 1 seulement, il faut voir du coté de la représentation d'un pointeur, je crois qu'il y a une discussion sur ça

    http://www.developpez.net/forums/sho...d.php?t=294634

    @+

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sorry60
    Je veux en une incrementation, passer de l'adresse 0x00000000 à l'adresse 0x00000001

    Je vais essayer avec les pointeurs
    L'adresse 0 n'est probablement pas accessible. Tu es sur quelle cible ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    int main (void)
    {
       unsigned int i = 0;
       unsigned char *p = (char *) i;
     
       for (i = 0; i < 10; i++)
       {
          printf ("%p\n", (void *) p);
          p++;
       }
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    00000000
    00000001
    00000002
    00000003
    00000004
    00000005
    00000006
    00000007
    00000008
    00000009
     
    Press ENTER to continue.
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    L'adresse 0 n'est probablement pas accessible.
    Je confirme, sous Linux j'obtiens le résultat suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    (nil)
    0x1
    0x2
    0x3
    0x4
    0x5
    0x6
    0x7
    0x8
    0x9
    Je ne connaissais pas cette technique du moins pour aller de un en un ... mais ici, quel en serait le but ou à quoi cela pourrais servir ?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. Manipuler des adresses IP
    Par GilardeauG dans le forum C#
    Réponses: 2
    Dernier message: 27/10/2010, 01h19
  2. Réponses: 7
    Dernier message: 19/07/2010, 19h01
  3. Manipuler des dates...
    Par Ti Jen-tsie dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2003, 11h46
  4. Manipulation des handle contexte
    Par rockbiker dans le forum DirectX
    Réponses: 1
    Dernier message: 09/05/2003, 18h51
  5. Fonctions de manipulation des chaines et des dates
    Par Fares BELHAOUAS dans le forum Débuter
    Réponses: 3
    Dernier message: 09/11/2002, 22h43

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