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

Langages de programmation Discussion :

Mettre un DWORD dans une chaine.


Sujet :

Langages de programmation

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 126
    Points
    126
    Par défaut Mettre un DWORD dans une chaine.
    Bonjour,

    je developpe actuellement un lecteur audio avec les lib gtk et BASS, je rencontre un petit problème de conversion.

    Je m'explique j'ai récupéré la durée totale de la musique charger dans le lecteur, je fait ça grâce a la fonction de la lib BASS suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    songTime = (DWORD)BASS_ChannelBytes2Seconds(channel, length);
    la fonction me renvoies dans songTime un DWORD.

    Maintenant que j'ai la durée total je dois l'afficher dans ma fenêtre gtk, pour afficher la durée je dois créer un label via la fonction : gtk_label_new(const gchar *str) :

    il faut donc que je convertisse mon DWORD en une chaine pour ensuite la passer a gtk_label_new().

    Et là je bloque j'ai tout essayé, sprintf(), écrire dans un fichier la durée sans les ':' (exple 5:35min est écrit dans mon fichier 535, je pensais me débrouiller après pour l'afficher correctement), fscanf() ect ect ect.... bref tout y est passé sans aucun résultat.J'ai fait du bufferoverflow, des resultat sans queue ni tête, bref j'y arrive pas.

    Donc un petit coup de mains serait le bienvenu, je programme sous linux pas sous windows donc a priori les fonctions de l'api windows ne me sont pas accessible (quoi que).

    voila, merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut,
    Citation Envoyé par Code Rom Voir le message
    la fonction me renvoie dans songTime un DWORD.
    Et ça compile ?

    Citation Envoyé par Code Rom Voir le message
    Maintenant que j'ai la durée totale je dois l'afficher dans ma fenêtre gtk, pour afficher la durée je dois créer un label via la fonction : gtk_label_new(const gchar *str) :

    il faut donc que je convertisse mon DWORD en une chaine pour ensuite la passer a gtk_label_new().
    Oui, et alors ? Il est où le problème ?
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    int main(int argc, char **argv)
    {
      //dword songtime; -- ne compile pas sous Linux/gtk2
      unsigned int songtime;
     
      songtime = 535;
      printf("%d\n", songtime);
     
      return 0;
    }
    Nom : sanstitre.png
Affichages : 130
Taille : 5,1 Ko

    Citation Envoyé par Code Rom Voir le message
    Et là je bloque j'ai tout essayé, sprintf(), écrire dans un fichier la durée sans les ':'
    Et ils sortent d'où, ces "deux-points" ? Tu ne nous dis pas tout, ou alors ce que tu dis tu le dis mal...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 126
    Points
    126
    Par défaut
    Oui le code compile sans aucun warning ni d'erreurs.
    Les deux points sorte du code que voici :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    void PlayMusic(const char *path)
    {
        if(BASS_ChannelIsActive(sample) !=  BASS_ACTIVE_PLAYING)
        {
            HCHANNEL channel = NULL;
            QWORD length;
    
            sample = BASS_SampleLoad(FALSE, path, 0, 0, 1, BASS_SAMPLE_MONO);
            if(sample == 0)
            {
                printf("Cant load the sample : %d\n", BASS_ErrorGetCode());
                exit(EXIT_FAILURE);
            }
    
            channel = BASS_SampleGetChannel(sample, FALSE);
            if(channel == NULL)
            {
                printf("Can't create a channel : %d", BASS_ErrorGetCode());
                exit(EXIT_FAILURE);
            }
    
            BASS_ChannelPlay(sample, FALSE);
    
            length = BASS_ChannelGetLength(sample, BASS_POS_BYTE);
    
            /** songTime est un double en fait pas un DWORD pardon, il est renvoyé en secondes **/
            songTime = (DWORD)BASS_ChannelBytes2Seconds(channel, length);
    
            if(songTime == -1)
            {
                printf("Impossible de voir la duree du morceaux : erreur : %d", BASS_ErrorGetCode());
                exit(EXIT_FAILURE);
            }
    
            /** les deux points viennent d'ici **/
            printf("Temps total : %u:%02u\n\n", songTime / 60, songTime % 60);
    
            /** les deux point sont imprimé dans le fichier **/
            fprintf(fp, "%u:%01u", songTime / 60, songTime % 60);
    
            g_signal_connect(GTK_BUTTON(buttonStop), "clicked", G_CALLBACK(Stop), NULL);
            g_signal_connect(GTK_BUTTON(buttonPause), "clicked", G_CALLBACK(Pause), NULL);
            g_signal_connect(GTK_BUTTON(buttonPlay), "clicked", G_CALLBACK(Play), NULL);
        }
    
        return;
    }
    Mon problème est basiquement donc de convertir un double (songTime) en une chaine afin de l'utiliser dans la fonction gtk_label_new(const gchar *str).

    il me semble avoir testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sprintf(chaine, "%f", songTime);
    ou bien
    sprintf(chaine, "%u", songTime);
    Sans succés, il faut que je ré éssaye.

    Voici pour info le prototype de la fonction BASS_ChannelBytes2Seconds() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double BASS_ChannelBytes2Seconds(DWORD handle, QWORD pos)
    Voila.

    PS: voila que ça ne compile plus.En fait j'avais déclaré la variable songTime en DWORD et ça compilais.Comme je me suis rendu compte que la fonction BASS_ChannelBytes2Seconds() renvoyé un double j'ai donc déclaré songTime en double, et voila se que j'obtiens comme erreur dans mon printf : "|error: invalid operands to binary % (have ‘double’ and ‘int’)"

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Dis donc, tu connais les bases du C ou quoi ? (à défaut de connaître le français) :
    Citation Envoyé par Code Rom Voir le message
    Les deux points sorte du code que voici :
    sortent !

    Essaye donc de remplacer tes deux-points par n'importe quoi d'autre, pour voir (underscore _, trait d'union -, etc.)
    Citation Envoyé par Code Rom Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            /** les deux points viennent d'ici **/
            printf("Temps total : %u:%02u\n\n", songTime / 60, songTime % 60);
    
            /** les deux pointS sont impriméS dans le fichier **/
            fprintf(fp, "%u:%01u", songTime / 60, songTime % 60);
    Citation Envoyé par Code Rom Voir le message
    Mon problème est basiquement donc de convertir un double (songTime) en une chaine afin de l'utiliser dans la fonction gtk_label_new(const gchar *str).
    Ouais ben t'as tout sous les yeux pour faire, yapluka.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 126
    Points
    126
    Par défaut
    C'est bon problème résolu, j'étais fatigué j'ai codé ça c'te nuit je devais pas avoir les yeux en face des trous.

    Sinon pour qlqls fautes d'orthographes t'es pas obligé de me prendre de haut comme tu le fait, chacun sont niveaux , chacun sa progression.Je me suis remis a coder il y a peu après un très long arrêt, j'ai donc encore quelque lacunes.
    Quand a ta façon de me parler je ne la supporte pas, tout ça pour des broutilles en plus, bref tu prends les gens de haut et ça te retomberas sur le coin de la yeule un jours, j'ai que ça a dire.

    Merci quand même !

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Sinon pour qlqls fautes d'orthographes t'es pas obligé de me prendre de haut comme tu le fait, chacun sont niveaux , chacun sa progression.Je me suis remis a coder il y a peu après un très long arrêt, j'ai donc encore quelque lacunes.
    Et tu t'es aussi remis à écrire après un très long arrêt?
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/07/2014, 08h15
  2. Réponses: 1
    Dernier message: 07/04/2009, 11h21
  3. Réponses: 13
    Dernier message: 03/10/2007, 11h25
  4. Mettre des guillemets dans une chaine SQL dans du VBA ?
    Par Marie_2116 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/07/2007, 10h43
  5. comment mettre 1 guillemet dans une chaine de texte
    Par maisonfoue dans le forum Access
    Réponses: 2
    Dernier message: 06/01/2007, 21h18

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