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 :

passage de variable type 128 bits conversion vers 2 _int64


Sujet :

C

  1. #21
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Bonjour Diogene,

    En fait je me suis rendu compte d'une chose c'est que le fait que le contenu de dest qui était vide est due au fait que la variable "char * badgeid_tab" qui est passée à la fonction "ascii2binary(badgeid_tab,lentab,dest,lendest)"

    subit une modification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     for(i=0 ; i<nbtab ;i++ ) tab[i] = tab[i]-'0';


    Et moi dans mon programme de call j'utilise une variable globale qui se trouve au delà du bloc main :

    fichier main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    char tab_badge_id[41];
     
    int main(int argc, char* argv[]) {
     
    ...
     
     
    strcpy(tab_badge_id,argv[4]);
     
    ...
     
    }

    et je fais une boucle d'envoi et passe l'adresse de ma variable tab_badge_id :

    fichier main:
    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
     
     
    ....
     
       for(int i=0; i<repeat; ++i)  //090427
       {
    	printf("\nSending configuration...\n");
    	printf("CARD_NUMBER = %s\n",tab_badge_id); //AFFICHE QUE LA PREMIERE FOIS
     
      ....
    	printf("Begin sending...\n");
     
         pCVgtS3100_interface->vgt_sendto_S3100(remote_ip,remote_port,act_doors,tab_badge_id,sequence_number,time_out_ms);
     
      ....

    Dans la fonction appelé:
    fichier dll:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    DLL_API(long) vgt_sendto_S3100	( char* remote_host, int remote_port, int active_door,/* __int64 badgeid*/ char * badgeid_tab, int seq_num, int timeout_ms)
    {
     
    ...
     
    write_struct(active_door,/* badgeid*/badgeid_tab, seq_num);

    Et Donc ma fonction write_struct appelle à son tour:
    fichier dll:
    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
     
     
    void write_struct(int active_door, /*__int64 badgeid*/ char * badgeid_tab, int seq_num)
    {
     
    	unsigned char dest[41];  //test 090515
    	int lentab = strlen(badgeid_tab) ;
      	int lendest = sizeof dest /sizeof *dest;
     
          //  *dest=ascii2binary(badgeid_tab,lentab,dest,lendest);
         ascii2binary(badgeid_tab,lentab,dest,lendest);
     
     ...
     
    }
    la fonction ascii2binary qui lui modifie la variable globale "char tab_badge_id[41]" .

    Et donc tab_badge_id n'affiche que la premier fois la valeur puis rien du tout
    est ce correct le raisonnement que je fais ?

    Comment pourrais je faire pour pouvoir utiliser avec répétition, en boucle ?


    Merci

  2. #22
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    La fonction ascii2binary , donc write_struct, modifie la chaîne de départ. Si celle-ci doit être conservée, il suffit de travailler sur une copie. Par exemple :

    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
    void write_struct(int active_door, const char * badgeid_tab, int seq_num)
    {
     
      unsigned char dest[41];  //test 090515
      char * prov;
      int lentab = strlen(badgeid_tab) ;
      int lendest = sizeof dest /sizeof *dest;
      prov = malloc(lentab+1);
      if(prov != NULL)
      {
          strcpy(prov, badgeid_tab);
          ascii2binary(prov,lentab,dest,lendest);
     
     ...
          free(prov);
      }
    }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #23
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Merci Diogene,

    Désolé pour le feedback tardif, c'est vrai j'aurai du penser plus-tôt je n'ai pas encore testé je vais voir.

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/03/2010, 10h59
  2. Réponses: 18
    Dernier message: 10/04/2009, 10h27
  3. Réponses: 4
    Dernier message: 22/01/2007, 18h12
  4. Passage de variables de DELPHI vers RAVE
    Par e120650 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/02/2005, 12h17
  5. déclaration de variables de 16, 32 et 128 bits
    Par samipate dans le forum C++
    Réponses: 10
    Dernier message: 30/12/2004, 22h33

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