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

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    septembre 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2017
    Messages : 36
    Points : 0
    Points
    0

    Par défaut Compression de données

    Bonjours j'ai créer une fonction compression mais je voudrai savoir si je peux la modifier pour qu'elle soit plus courte mais toujours fonctionnels ;

    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
    32
    33
    int decompression(unsigned char source[], int nb, unsigned char dest[])
    {
    int i,j,l,dec;
    i,j,l,dec = 0;
     
    for (i=0;i<nb;i++)
    {
    if (source[i]== 0xFD)
    {
    if((source[i+1] == 0xFD)||(source[i+1] == (0xFE)))
    {
    dest[1-dec]=source[i+1];
    i=i+2;
    dec = dec+1;
    }
    }
    if (source[i]==0xFE)
    {
    for (j=0;j<(source[i+1]);j++)
    {
    dest[i-dec] = source[i+2];
    dec = dec-1;
    }
    dec = dec+3;
    i= i+2;
    }
    else
    {
    dest[i-dec] = source[i];
    }
    }
    return nb;
    }
    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
     
    int main
    {
    unsigned char toto[50]={0x78,0x56,0x74,0xFE,0x02,0x10,0x41,0x78,0xFD,0xFE,0x36,0xFD,0xFD,0xFE,0x07,0x25};
    unsigned char test[50];
    int bn;
    bn=50;
     
     
    printf("\n");
    printf("Tableau decompression :\n");
    bn =(decompression(toto, bn, test));
    dump(test,bn);
    printf(("le nombre d'octets est : %d", bn));
    }
    et j'avais ceci à respecter :
    Nom : 36.png
Affichages : 88
Taille : 248,5 KoNom : 35.png
Affichages : 86
Taille : 66,4 Ko

  2. #2
    Membre expert
    Inscrit en
    mars 2005
    Messages
    1 362
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 1 362
    Points : 3 994
    Points
    3 994

    Par défaut

    Compression ou décompression ? J'ai lu en diagonale mais déjà source[i+1] avec i de 0 à nb - 1, ça pète. dest[1-dec], ça pète. Aucune détection d'erreur, ça pète.

    As-tu écrit l'algorithme avant de te lancer dans l'implémentation C ? Il te faut une machine à états pour gérer ça.

    Utilise un switch, ce sera plus lisible.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    septembre 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2017
    Messages : 36
    Points : 0
    Points
    0

    Par défaut

    Décompression est cette fonction

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    septembre 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2017
    Messages : 36
    Points : 0
    Points
    0

    Par défaut

    Quand tu dis ça pète ça veux dire que c'est bien?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    septembre 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2017
    Messages : 36
    Points : 0
    Points
    0

    Par défaut

    et en fait la fonction dump, voilà le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void dump(unsigned char t[], int nb)
    {
      int i;
      for (i=0; i < nb; i++)
      {
      if ((i % 16) == 0)
        printf("%s%04d", i ?"\n" :"", i); //?v1 :v2 valant v1 si "expression" est vraie et "v2" si "expression" est fausse
        printf(" %02x", t[i]);
      }
      printf("\n");
    }
    Nom : 11.png
Affichages : 72
Taille : 153,2 Ko

    et pour la décompression j'ai suivi ceci :

    Nom : 12.png
Affichages : 70
Taille : 102,5 Ko

    et donc voici mon 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
    16
    int main()
    {
      unsigned char toto[50]={0x78,0x56,0x74,0xFE,0x02,0x10,0x41,0x78,0xFD,0xFE,0x36,0xFD,0xFD,0xFE,0x07,0x25};
      unsigned char test[50];
      int bn;
      bn=50;
      printf("Fonction Dump :\n");
      dump(toto,bn);
     
      printf("\n");
      printf("Tableau decompression :\n");
      bn =(decompression(toto, bn, test));
      dump(test,bn);
      printf(("le nombre d'octets est : %d", bn));
     
    }

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    septembre 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2017
    Messages : 36
    Points : 0
    Points
    0

    Par défaut

    Donc as tu des idées pour que mon code soit plus court ?
    je t'ai donnée tous mon code

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    septembre 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2017
    Messages : 36
    Points : 0
    Points
    0

    Par défaut

    Ah 😂

  8. #8
    Membre expert
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    1 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : février 2008
    Messages : 1 982
    Points : 3 770
    Points
    3 770
    Billets dans le blog
    4

    Par défaut

    Quand il dit que ça pète au contraire !

    Tu ne prends pas le temps de regarder le déroulé de ton algorithme.

    Source[i+1] donne quoi quand i=nb-1, c’est à dire la dernière itération de ta boucle ?
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    septembre 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2017
    Messages : 36
    Points : 0
    Points
    0

    Par défaut

    Foetus ma fonction dump est bonne ce que je cherche c'est réduire mon int decompression car je trouve qu'il est trop long

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    septembre 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : septembre 2017
    Messages : 36
    Points : 0
    Points
    0

    Par défaut

    Citation Envoyé par gerald3d Voir le message
    Quand il dit que ça pète au contraire !

    Tu ne prends pas le temps de regarder le déroulé de ton algorithme.

    Source[i+1] donne quoi quand i=nb-1, c’est à dire la dernière itération de ta boucle ?
    Si je fais i = nb-1 ; j'ai n'importe quoi dans la console

    Nom : 99.png
Affichages : 51
Taille : 8,9 Ko

    alors que mon int donne :

    Nom : 96.png
Affichages : 50
Taille : 8,3 Ko

Discussions similaires

  1. [Algo] Compression de données
    Par GyZmoO dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 10/03/2007, 13h18
  2. Compresser les données avant insertion ?
    Par GregPeck dans le forum Outils
    Réponses: 2
    Dernier message: 07/08/2006, 17h09
  3. Compression de données
    Par mzt.insat dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 13/03/2005, 16h01
  4. Compression de données au format Zip avant sauvegarde
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/09/2004, 17h40
  5. compression de données du point de vue algorithmique
    Par GoldenEye dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 26/06/2002, 16h51

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