[C] Convertir un tableau char en long
Fermé
Sylvain Wells
-
6 avril 2009 à 11:03
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 avril 2009 à 15:30
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 avril 2009 à 15:30
A voir également:
- Char to long
- Pc long a demarrer - Guide
- Qwerty to azerty - Guide
- 3 bip long 2 bip court hp omen - Forum Matériel & Système
- Video to video - Télécharger - Conversion & Codecs
- Traduction anglais français texte long gratuit photo - Guide
5 réponses
squall289
Messages postés
98
Date d'inscription
mardi 31 mars 2009
Statut
Membre
Dernière intervention
29 mai 2009
13
6 avril 2009 à 11:16
6 avril 2009 à 11:16
Le langage C doit pouvoir convertir un long en chaine de caractère nativement, puisque tout nombre est aussi une chaine de caractère. par contre une chaine de caractère n'est pas forcément un nombre.
Par exemple : 1600 est un int, et peut se convertir simplement en char par '1600'.
Par contre convertir 'mille six cent' en long c'est impossible (enfin si, mais pas directement par le langage).
c'est donc normal que tu n'arrives pas à forcer la conversion.
Il faut donc que tu récupères les scores en long dans ton programme, que tu les stockes et que tu les ressortes après.
Par exemple : 1600 est un int, et peut se convertir simplement en char par '1600'.
Par contre convertir 'mille six cent' en long c'est impossible (enfin si, mais pas directement par le langage).
c'est donc normal que tu n'arrives pas à forcer la conversion.
Il faut donc que tu récupères les scores en long dans ton programme, que tu les stockes et que tu les ressortes après.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
6 avril 2009 à 12:06
6 avril 2009 à 12:06
Salut,
Donne un exemple de ce que tu as en long et de ce que tu as dans ton tableau de char qu'on puisse être sûr de parler de la même chose.
Sinon pour convertir une chaîne en long, tu peux utiliser strtol (ou à la limite atol et sscanf, mais moins bien).
Cdlt
Donne un exemple de ce que tu as en long et de ce que tu as dans ton tableau de char qu'on puisse être sûr de parler de la même chose.
Sinon pour convertir une chaîne en long, tu peux utiliser strtol (ou à la limite atol et sscanf, mais moins bien).
Cdlt
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
6 avril 2009 à 12:11
6 avril 2009 à 12:11
Salut.
regarde du coté des fonctions scanf() (scanf, sscanf et fscanf) C'est une des meilleur méthode.
Sinon, il y a la fonction atoi() ou atol().
regarde du coté des fonctions scanf() (scanf, sscanf et fscanf) C'est une des meilleur méthode.
Sinon, il y a la fonction atoi() ou atol().
Par exemple :
J'ai un long égal à 12. Pour le stocker, je le convertit en chaîne de caractères pour l'enregistrer ; dans mon .txt, il y a donc écrit 12. mais comme c'est une chaîne de caractères, je ne peux pas la convertir en long, car 12 n'est plus une valeur mais un "mot", en quelque sorte.
L'idéal serait bien sûr de stocker mon long en tant que long, mais je ne vois pas comment faire...
J'ai un long égal à 12. Pour le stocker, je le convertit en chaîne de caractères pour l'enregistrer ; dans mon .txt, il y a donc écrit 12. mais comme c'est une chaîne de caractères, je ne peux pas la convertir en long, car 12 n'est plus une valeur mais un "mot", en quelque sorte.
L'idéal serait bien sûr de stocker mon long en tant que long, mais je ne vois pas comment faire...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
7 avril 2009 à 12:02
7 avril 2009 à 12:02
Dans ton fichier, tu peux lire avec fscanf(fp,"%ld",&nb);
Ou alors si tu as ta chaîne, tu peux convertir avec atol ou strtol.
Ou alors si tu as ta chaîne, tu peux convertir avec atol ou strtol.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
7 avril 2009 à 12:17
7 avril 2009 à 12:17
Salut.
Fiddy se répète (il est gentil), les solutions ont été donné, rien à dire de plus.
Pour enregistrer un entier directement, il faut déjà savoir ce qu'il y a d'autre dans ton fichier.
s'il n'y a que des entiers, enregistrés de façon séquentielle toujours identique, tu peux alors utiliser l'écriture dans un fichier au format binaire.
Si ma mémoire est bonne :
Fiddy se répète (il est gentil), les solutions ont été donné, rien à dire de plus.
Pour enregistrer un entier directement, il faut déjà savoir ce qu'il y a d'autre dans ton fichier.
s'il n'y a que des entiers, enregistrés de façon séquentielle toujours identique, tu peux alors utiliser l'écriture dans un fichier au format binaire.
Si ma mémoire est bonne :
int f=open("toto.bin",O_WRONLY); long l; ... write(f,&l,sizeof(l));Et pour lire
int f=open("toto.bin",O_RDONLY); long l; read(f,&l,sizeof(l));
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
7 avril 2009 à 12:43
7 avril 2009 à 12:43
Merci pour le compliment lol.
Par contre, tu veux sûrement parler de fwrite et fread au lieu de write et read ^^.
Par contre, tu veux sûrement parler de fwrite et fread au lieu de write et read ^^.
//écriture fwrite(&l,sizeof l,1,f); //lecture fread(&l,sizeof l,1,f);
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
7 avril 2009 à 14:09
7 avril 2009 à 14:09
Non, en conjonction avec open() (et non fopen()) c'est read() et write() qu'il faut utiliser.
Ce soit les fonction générique d'écriture dans un flux.
Ce soit les fonction générique d'écriture dans un flux.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
7 avril 2009 à 14:22
7 avril 2009 à 14:22
Dommage d'utiliser des fonctions non standards alors fopen, fwrite et fread le sont...
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
7 avril 2009 à 15:03
7 avril 2009 à 15:03
ça dépend de ce qu'on appel standard...
D'après les pages de manuel, fread(), conformité : ANSI X3.159-1989 (``ANSI C'')
et read(), conformité : SVr4, SVID, AT&T, POSIX, X/OPEN, BSD 4.3
POSIX, c'est pas mal comme standard, enfin, je ne sais pas trop comment s'arrangent ces différentes couches.
D'après les pages de manuel, fread(), conformité : ANSI X3.159-1989 (``ANSI C'')
et read(), conformité : SVr4, SVID, AT&T, POSIX, X/OPEN, BSD 4.3
POSIX, c'est pas mal comme standard, enfin, je ne sais pas trop comment s'arrangent ces différentes couches.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
7 avril 2009 à 15:30
7 avril 2009 à 15:30
Ce que l'on appelle standard c'est lorsque la fonction est issue des 24 headers ISO C.
unistd.h n'en faisant pas parti, les fonctions définies dedans ne sont pas standard ISO C.
Vaut mieux choisir une fonction standard C qu'une fonction POSIX (sous réserve d'avoir le choix bien sûr).
unistd.h n'en faisant pas parti, les fonctions définies dedans ne sont pas standard ISO C.
Vaut mieux choisir une fonction standard C qu'une fonction POSIX (sous réserve d'avoir le choix bien sûr).
6 avril 2009 à 12:04
tout nombre est aussi une chaine de caractère. par contre une chaine de caractère n'est pas forcément un nombre.
Euh non. Ce sont deux éléments qui n'ont strictement rien à voir. L'un est un long, l'autre est un tableau de char...
6 avril 2009 à 14:45
Dans le sens ou char '12' fonctionne alors que long 'douze' ne fonctionne pas.. Bref Passons, le but est quand même de donner une solution à la question posé tout en expliquant pourquoi cela ne fonctionne pas.
6 avril 2009 à 15:11
La chaîne de caractères "12" n'a aucun lien (ni de près ni de loin) avec le nombre 12.
e but est quand même de donner une solution à la question posé tout en expliquant pourquoi cela ne fonctionne pas
Oui je suis d'accord. Mais à condition de donner les bonnes explications ^^. Pour la solution, les postes #3 et #4 sont là (strtol, atol, etc).