chaine de caractère vers variable en C
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

chaine de caractère vers variable en C



  1. #1
    harominc

    chaine de caractère vers variable en C


    ------

    Bonjour,

    j'ai des fichier .raw avec des données brutes a l’intérieur (suite de nombre codés en 16bits). Comme les nombre sont stockés directement, quand j'ouvrir le fichier avec bloc note on ne voit que des caractères illisibles (la correspondance ascii des octets stockés). Pour pouvoir lire les nombres j'utilise :

    fread( &nombre , sizeof(int16_t) , 1 , fichier_a_lire );//pour lire dans le fichier
    sprintf(chaine_de_caractere, "%d", nombre);//pour réécrire les nombre 16bits en chaine de caractère lisible

    ainsi le nombre en 16bits est stocké en lisible sous forme de chaine de caractere dans chaine_de_caractere

    J'aimerais savoir comment faire l'inverse, cad partant d'un nombre stocké dans une chaine de caractère (ca pourra etre un nombre signed ou unsigned, en 8 ou 16 bits) par exemple "102" , pouvoir le réécrire dans un fichier sous forme binaire ce qui donnerait "f" écrit sur le fichier.
    merci

    -----

  2. #2
    pm42

    Re : chaine de caractère vers variable en C

    Avec fwrite qui est le symétrique de fread normalement.

  3. #3
    Jack
    Modérateur

    Re : chaine de caractère vers variable en C

    ... et avec sscanf qui est le symétrique de sprintf normalement aussi.

  4. #4
    harominc

    Re : chaine de caractère vers variable en C

    salut les gars merci pour vos réponses mais je crois que vous avez pas compris ma question. je vais essayer de reformuler plus simple:

    j'ai une variable
    uint8_t nbr=102;

    nbr contient le nombre 102. Je veux obtenir ce nombre sous forme de chaine de caractère, ca c'est facile j'utilise sprintf:

    sprintf(chaine_de_caractere, "%d", nbr);

    chaine_de_caractere contient "102", elle ne contient pas le nombre 102 elle contient la chaine de caractère 102".




    Je veux faire l'inverse:
    j'ai une chaine de caractère
    char chaine_de_caractere[] = "102";
    chaine_de_caractere contient "102", mais moi je veux en tirer le nombre 102 et non pas une chaine de caractère, et stocker le nombre dans ma variable nbr



    sscanf sert a stocker une chaine de caractère dans une autre (et non pas une chaine de caractère dans une variable) donc je pense pas que ca fonctionnera ici. je suis pas sur qu'il existe une fonction toute faite pour cela...

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : chaine de caractère vers variable en C

    Citation Envoyé par harominc Voir le message
    salut les gars merci pour vos réponses mais je crois que vous avez pas compris ma question
    Je pense que si, au contraire.
    sscanf sert a stocker une chaine de caractère dans une autre (et non pas une chaine de caractère dans une variable)
    Non. Lis la doc avec plus d'attention. Ou alors, tu ne sais pas non plus comment fonctionne scanf.

    sscanf fonctionne exactement comme scanf, la différence se faisant sur la source des données : l'entrée standard pour scanf, une chaine pour sscanf.
    Dernière modification par Jack ; 29/03/2020 à 14h32.

  7. #6
    pm42

    Re : chaine de caractère vers variable en C

    Citation Envoyé par harominc Voir le message
    sscanf sert a stocker une chaine de caractère dans une autre (et non pas une chaine de caractère dans une variable) donc je pense pas que ca fonctionnera ici. je suis pas sur qu'il existe une fonction toute faite pour cela...
    RTFM pour faire la version courte de la réponse de Jack

  8. #7
    harominc

    Re : chaine de caractère vers variable en C

    Citation Envoyé par Jack Voir le message
    Je pense que si, au contraire.
    Non. Lis la doc avec plus d'attention. Ou alors, tu ne sais pas non plus comment fonctionne scanf.

    sscanf fonctionne exactement comme scanf, la différence se faisant sur la source des données : l'entrée standard pour scanf, une chaine pour sscanf.
    en effet ca a l'air de fonctionner désolé ca fait bien longtemps que je n'ai pas fais de C .

    en fait j'avais essayé ca:

    int8_t nbr;
    sscanf("102", "%d", &nbr);

    fwrite( &nbr , sizeof(int8_t) , 1 , fichier);//ici le programme sarretait et ca n'ecrivait rien sur le fichier



    j'ai essayé avec un type int :
    int nbr;
    sscanf("102", "%d", &nbr);

    fwrite( &nbr , sizeof(int8_t) , 1 , fichier);//et la ca fonctionne bien

    je ne sais pas pourquoi est ce qu'avec le type int8_t ca ne fonctionne pas
    merci!

  9. #8
    pm42

    Re : chaine de caractère vers variable en C

    Tu as mis le format d'un int dans sscanf donc 32 ou 64 bits de nos jours pour lire un int8_t qui est sur 8 bits.

    Il y a des chance que ton programme s'arrête parce que tu as eu une erreur mémoire.

  10. #9
    Jack
    Modérateur

    Re : chaine de caractère vers variable en C

    Parce que %d, c'est pour décoder un entier. Donc si tes entiers font 32 bits par exemple, le sscanf a pris ton int8_t et les 3 octets suivants pour en faire un entier, donc faux évidemment.

  11. #10
    Jack
    Modérateur

    Re : chaine de caractère vers variable en C

    J'ajouterais que dans un programme bien fait, les valeurs de retour des fonctions doivent être testées le cas échéant. Je serait curieux de connaitre ce que retourne sscanf dans le cas où ton programme ne marche pas.

Discussions similaires

  1. [C] chaine de caractère.
    Par Cech dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 26/12/2015, 11h05
  2. [C] Concaténer chaine de caractère + caractère
    Par Lechero dans le forum Programmation et langages, Algorithmique
    Réponses: 17
    Dernier message: 26/01/2013, 11h43
  3. chaîne de caractère
    Par invite9c4bf030 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 02/04/2012, 19h30
  4. chaine de caractère
    Par dalida1111 dans le forum Programmation et langages, Algorithmique
    Réponses: 27
    Dernier message: 01/01/2012, 17h38
  5. chaîne de caractère
    Par dalida1111 dans le forum Programmation et langages, Algorithmique
    Réponses: 15
    Dernier message: 01/01/2012, 15h06