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 :

probleme de chaines de caracteres..


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 25
    Par défaut probleme de chaines de caracteres..
    Bonjour,
    alors mon probleme c'est que je veux avoir le caractere correspondant à entier qui est egal à 260 (donc superieur à 255)....la methode traditionnelle consiste à faire : char c = (char)97 par exemple pour obtenir 'a'....
    comment fait-on pour une valeur au dessus de 255..
    C'est super urgent...Merci à vous tous

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par jimi154 Voir le message
    Bonjour,
    alors mon probleme c'est que je veux avoir le caractere correspondant à entier qui est egal à 260 (donc superieur à 255)....la methode traditionnelle consiste à faire : char c = (char)97 par exemple pour obtenir 'a'....
    comment fait-on pour une valeur au dessus de 255..
    C'est super urgent...Merci à vous tous
    La question n'est pas très claire. Qu'est-ce que tu veux faire au juste? Et dans quel but ?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 25
    Par défaut probleme chaine
    alors c'est dans le cadre d'un programme utilisant la methode de compression LZW....: imaginons que j'ai la chaine suivante : stabcdsta....on voit que dans ma chaine j'ai 2 fois "sta" donc ma chaine une fois compressée ressemblera à ceci : stabcd(caractere correspondant à 260) qui sera stocké sur 2octets au lieu de 3 octets pour "sta"...
    j'utilise des valeurs superieures à 255 pour ne pas utiliser des valeurs deja presentes dans le texte initial.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Le type char est généralement codé sur un octet, donc pas plus de 255 valeurs.

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par aoyou Voir le message
    Le type char est généralement codé sur un octet, donc pas plus de 255 valeurs.
    Meme s'il etait code sur 4 octets, le langage C ne garantit que la plage de valeur 0 a 255 pour un unsigned char. On ne peut donc pas parler d'un caractere de valeur 260.

    jimi154: ton probleme est qu'un algorithme de compression ne voit qu'un flux de bytes. La notion de caractere est perdue. Ton fichier compresse est un fichier binaire.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 25
    Par défaut chaines de caracteres
    OK merci beaucoup...et comment je fais pour enregister que des bits...correspondant par exemple à 260 (l'enregistrement se fait ds un fichier)

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Il te faut choisir le format du resultat de ton algo. Ca depend de la plage de valeur retournee par l'algo de compression. J'imagine qu'un unsigned short peut faire l'affaire.

  8. #8
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 25
    Par défaut
    stp, tu peux m'expliquer un peu plus avec un ptit bout de code..

  9. #9
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Je n'ai pas de bout de code, mais le raisonnement est assez simple. Les caracteres utilisees comme entree a l'algorithme de compression sont codes sur 256 valeurs, de 0 a 255. Donc ils tiennent dans un char. Pour le LZW, tu as besoin de donner un code a des chaines de caracteres. Puisque 256 est libre, tu commences la. unsigned char ne suffit donc plus, on passe au suivant: unsigned short. La plage garantie pour ce type est 0 a 65535. Si tu as besoin de plus de codes, alors il faudra envisager un type plus grand.

  10. #10
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 25
    Par défaut
    j'ai bien compris, le seul hic c'est que le short, il va falloir que je le mette dans un fichier, avec fputc par exemple mais fputc convertit le short en char n'est-ce pas ? donc j'aurai le même probleme. sauf si je me trompe

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jimi154 Voir le message
    j'ai bien compris, le seul hic c'est que le short, il va falloir que je le mette dans un fichier, avec fputc par exemple mais fputc convertit le short en char n'est-ce pas ? donc j'aurai le même probleme. sauf si je me trompe
    Tu peux utiliser fwrite(). Attention, rien ne garantit qu'un short fasse 16-bit (sans parler des problèmes d'endianess).

    Pour être portable, il vaut mieux utiliser fputc() 2 fois...
    unsigned data = 456;

    fputc((data >> 8) & 0xFF, fp); /* MSB en tete (convention 'reseau') */
    fputc((data >> 0) & 0xFF, fp);

  12. #12
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 25
    Par défaut
    merci pour votre aide : petite question : si on a 101011 par exemple :
    101011 >> 4 <=> 0000101011 ?
    ou bien :
    101011 >> 4 <=> 1010110000

    Merci pour votre dévouement

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jimi154 Voir le message
    merci pour votre aide : petite question : si on a 101011 par exemple :
    101011 >> 4 <=> 0000101011 ?
    ou bien :
    101011 >> 4 <=> 1010110000
    >> signifie décalage à droite...
    << signifie décalage à gauche...

  14. #14
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 25
    Par défaut
    salut je viens d'essayer ce que tu m'as dit mais le fputc ne prend que 8 bits...il ignore les autres bits....que dois-je faire ?

  15. #15
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par jimi154 Voir le message
    salut je viens d'essayer ce que tu m'as dit mais le fputc ne prend que 8 bits...il ignore les autres bits....que dois-je faire ?
    fputc(int c, FILE *stream) transforme effectivement c en un unsigned char, mais comme seuls les 8 bits de poids faible t'intéressent (les autres sont forcés à 0 par le masque), je ne vois pas où est le problème?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jimi154 Voir le message
    salut je viens d'essayer ce que tu m'as dit mais le fputc ne prend que 8 bits...il ignore les autres bits....que dois-je faire ?
    Exactement ce que j'ai indiqué.

  17. #17
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 25
    Par défaut
    Non....ce qui m'interessait c'est de pouvoir enregistrer quelque chose de 9 bits par exemple : c'est le principe même de l'algorithme de compression...
    je vous explique l'algorithme :
    supposons que mon fichier contienne : "statistiques et mathematiques"
    le premier "st" sera ajouté dans un dictionnaire avec une valeur de 260 par exemple
    Dans le fichier compressé : le 2eme "st" sera remplacé par une valeur codée sur moins de 16bits mais plus de 8 bits sinon elle jouerait le role d'un caractere ordinaire..(260 par exemple)..
    bref, ce qui m'importe c'est de savoir enregistrer une valeur de 10bits par exemple dans le fichier.

  18. #18
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Tu n'as rien en standard pour gérer cela.

    Ce que tu peux faire, ce sont tes propres fonctions pour écrire bit-à-bit dans un buffer de char (en utilisant des décalages, etc.) et vider ce buffer dans le fichier une fois plein...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jimi154 Voir le message
    Non....ce qui m'interessait c'est de pouvoir enregistrer quelque chose de 9 bits par exemple : c'est le principe même de l'algorithme de compression...
    <...>bref, ce qui m'importe c'est de savoir enregistrer une valeur de 10bits par exemple dans le fichier.
    Certes, mais l'enregistrement dans un fichier se fait par bloc de 8 bits.

    Si tu veux des mots de longueur variable, tu dois les 'assembler' par blocs de 8 bits. Le dernier étant complété par des 0 ou de 1, par exemple.

Discussions similaires

  1. probleme de chaine de caractere
    Par darkspoilt dans le forum VBA Access
    Réponses: 19
    Dernier message: 12/06/2007, 22h37
  2. [SQL]Probleme avec chaine de caracteres
    Par acheo dans le forum Access
    Réponses: 4
    Dernier message: 31/03/2007, 22h28
  3. probleme remplacement chaine de caractere avec SED
    Par rhaamo dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 24/01/2007, 15h12
  4. probleme controle chaine de caractere
    Par Didier77 dans le forum Access
    Réponses: 18
    Dernier message: 25/07/2006, 14h56
  5. [MySQL] probleme decoupage chaine de caractere
    Par mahfout_i dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/03/2006, 18h57

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