begin process at 2010 03 21 23:03:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Convertir un entier decimal en hexadecimal de la forme 0x1B


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Convertir un entier decimal en hexadecimal de la forme 0x1B

mercredi 20 juillet 2005 à 16:08:31 | Convertir un entier decimal en hexadecimal de la forme 0x1B

slobberbone

Bonjour !

Voilà je developpe sous visual C++ et je voulais savoir s'il existait une fonction ou si qq1 en avait dejà créee une qui permet de faire un truc du genre :

je lui envoi un entier décimal 10 et elle me renvoi un entier hexa de la forme 0x0A par exemple ...



Merci d'avance

Slobberbone
mercredi 20 juillet 2005 à 16:14:04 | Re : Convertir un entier decimal en hexadecimal de la forme 0x1B

BruNews

Administrateur CodeS-SourceS
itoa(nbr, buff, 16);

ciao...
BruNews, MVP VC++
mercredi 20 juillet 2005 à 16:29:48 | Re : Convertir un entier decimal en hexadecimal de la forme 0x1B

slobberbone

merci mais jai dejà essayer et ca ne fonctionne pas pour ce que je veux ....



Slobberbone
mercredi 20 juillet 2005 à 16:33:00 | Re : Convertir un entier decimal en hexadecimal de la forme 0x1B

Alcantornet

Hello,

Alors essai

printf("0x%X",123); ou printf("0x%x",123);

et si tu mettre dans une chaîne

sprintf(buff,"0x%X",123); ou sprintf(buff,"0x%x",123);
jeudi 21 juillet 2005 à 02:03:03 | Re : Convertir un entier decimal en hexadecimal de la forme 0x1B

aardman

Membre Club
Salut,
Pour formatter la chaine comme il veut ca serait plutot "0x%02x".
jeudi 21 juillet 2005 à 09:40:16 | Re : Convertir un entier decimal en hexadecimal de la forme 0x1B

slobberbone

Merci pour toute ces réponses, mais ce que je veux essayer de faire c qu'à partir dun nombre décimal obtenir un nombre hexadécimal de la forme 0x5A par exemple pour la valeur 90 !!

mais je veux garder le format int du debut jusqu'à la fin  ...
pcq sprintf  travaille avec des chaines de caractères ... et c pas ce que je souhaite vu qu'il faut que je renvoi la valeur sur le port série sous la forme 0x1B ...

pcq g essayé avec atoi() pour reconvertir le resultat de sprintf() mais ca ne donne rien ...

Merci beaucoup encore une fois !
Mais c pcq g peut -etre pas etais assez precis ...

Slobberbone
jeudi 21 juillet 2005 à 10:02:27 | Re : Convertir un entier decimal en hexadecimal de la forme 0x1B

Alcantornet

Hello,

Dans un format int, il n'est pas question d'hexadécimal, de décimale... c'est tout de façon du BINAIRE, tu peux pas avoir de l'hexa dans du int. C'est juste lors d'un affichage que tu peux choisir le formattage ou dans une chaîne de caractère mais pas dans un int.

Je pense que t'a qu'à renvoier ton int tel quel.

jeudi 21 juillet 2005 à 10:23:25 | Re : Convertir un entier decimal en hexadecimal de la forme 0x1B

cosmobob

farpaitement, la valeur d'un nombre ne depend pas de la base dans laquelle il s'exprime !!!
seul son aspect quand tu l'affiches en depend.

il y a egalite entre 90 (base10) et 0x5A (base16). A l'écran ca n'est pas pareil parce que ce meme nombre est exprimé dans deux bases non identiques, mais sinon c'est le meme !!

d'ailleurs tu peux vérifier que 0x5A + 90 = 180 ... (printf("val : %d\n", 0x5A+90) )

il y a une petite confusion dans ton esprit ...
si sur ton port série tu envoies 0x5A ou 90, et que tu sniffes, dans les 2 cas il va t'afficher 0x5A (s'il taffiche les choses en hexa)
en gros t'as rien a convertir !!!

a+
jeudi 21 juillet 2005 à 10:42:33 | Re : Convertir un entier decimal en hexadecimal de la forme 0x1B

slobberbone

vi mais le probleme (lol) c que je ve envoyer 0x2D et pas 45 !!! par exemple et crois moi qd je sniffe ca marche pas
et si j'envois 45 sur mon port com grace à writefile() il va m'envoyer 0x09 et 0x00 !!!! ( 90 en caractere !!!)

donc du coup g une autre fonction : writecomblock :

//---------------------------------------------------------------------------
// BOOL NEAR WriteCommBlock( HANDLE f, LPSTR lpByte , DWORD dwBytesToWrite)
//
//  Description:
//    Envoi un block sur le port COM
//
//---------------------------------------------------------------------------
BOOL NEAR WriteCommBlock( HANDLE f, LPSTR lpByte , DWORD dwBytesToWrite)
{

    BOOL        fWriteStat ;
    DWORD       dwBytesWritten ;
    DWORD       dwErrorFlags;
    DWORD       dwError;
    DWORD       dwLength;
    COMSTAT     ComStat;
    char        szBuff[150 ] ;
    OVERLAPPED  osWrite ;
    LPSTR lpByteBis;
    DWORD dwBytesToWriteBis;


    if (f < 0)
        return ( FALSE ) ;
   
    dwError = ClearCommError( f, &dwErrorFlags, &ComStat ) ;
    if (!dwError)
        return(FALSE);
    if(ComStat.cbInQue)
    {
        memset( &osWrite, 0, sizeof( OVERLAPPED ) ) ;
        ClearCommError( f, &dwErrorFlags, &ComStat ) ;
        do
        {
            dwLength = min( (DWORD) sizeof(szBuff), ComStat.cbInQue ) ;
            ReadFile( f, szBuff, dwLength, &dwLength, &osWrite) ;
            ComStat.cbInQue -= dwLength;  
        }while(ComStat.cbInQue>0);
    }
   
    memset( &osWrite, 0, sizeof( OVERLAPPED ) ) ;
   
    fWriteStat = WriteFile( f, lpByte, dwBytesToWrite,
                           &dwBytesWritten, &osWrite ) ;

    if (!fWriteStat)
    {
        dwError=GetLastError();
        if(dwError == ERROR_IO_PENDING)
        {
            //il faut que getoverlappedresult soit egale a 0
            //avant de recommencer writefile
           while(!GetOverlappedResult( f,&osWrite, &dwBytesWritten, TRUE ))
           {
                if (dwBytesWritten && (dwBytesWritten < dwBytesToWrite))
                WriteFile( f, lpByte+dwBytesWritten, dwBytesToWrite-dwBytesWritten,
                           &dwBytesWritten, &osWrite ) ;
 
                dwError = GetLastError();
                if(dwError == ERROR_IO_INCOMPLETE)
                    // normal result if not finished
                    continue;
                else
                {
                    // an error occurred, try to recover
                    ClearCommError( f, &dwErrorFlags, &ComStat ) ;
                    break;
                }
            }
            memset( &osWrite, 0, sizeof( OVERLAPPED ) ) ;
            ClearCommError( f, &dwErrorFlags, &ComStat ) ;
               if ((dwBytesWritten>0) && (dwBytesWritten < dwBytesToWrite))
            {
            // ici on doit emettre les octets qui manquent
              lpByteBis=lpByte+dwBytesWritten;
              dwBytesToWriteBis=dwBytesToWrite-dwBytesWritten;

              fWriteStat=WriteFile( f, lpByte+dwBytesWritten, dwBytesToWrite-dwBytesWritten,
                     &dwBytesWritten, &osWrite ) ;
              if (!fWriteStat)
              {
                dwError=GetLastError();
                if(dwError == ERROR_IO_PENDING)
                {
                while(!GetOverlappedResult( f,&osWrite, &dwBytesWritten, TRUE ));
                //traite 3eme bloc 1 bloc message 120 octets environ
                fWriteStat=WriteFile( f, lpByteBis+dwBytesWritten, dwBytesToWriteBis-dwBytesWritten,
                     &dwBytesWritten, &osWrite ) ;
                dwError=GetLastError();
                if(dwError == ERROR_IO_PENDING)
                while(!GetOverlappedResult( f,&osWrite, &dwBytesWritten, TRUE ));

                //FIN
                }

              }
            }
         }
        else
        {                            
            // some other error occurred

   
            ClearCommError( f, &dwErrorFlags, &ComStat ) ;
                       
            return ( FALSE );
        }
    }
    return ( TRUE ) ;

} // end of WriteCommBlock()


voilà et pour cette fonction j'envoi un entier 0x2D par exemple et g bien 0x2D qui est envoyer sur le port série !

donc c peut etre un peu confu ds mon esprit ( c mm sur lol! ) mais y a qd mm qqchose qui coince !!!!

merci


Slobberbone
jeudi 21 juillet 2005 à 11:20:32 | Re : Convertir un entier decimal en hexadecimal de la forme 0x1B

slobberbone


dsl ! tu avais raison cosmobob !!!

enfait, avec writefile ca marche pas mais aves writeblock oui !!

y a un moment des moments je suis vraiment space !!

enfin !

Merci a tous et puis au moins vous avez ma fonction writeblock qui soit dit en passant permet d'envoyer tt ce qu'on veut sur le port série !!!!


Slobberbone


Cette discussion est classée dans : convertir, entier, forme, decimal, hexadecimal


Répondre à ce message

Sujets en rapport avec ce message

Convertir un entier en String [ par maxinfos ] Bonjour,je voudrais savoir s'il était possible d'obtenir un code me permettant de convertir un entier (int) en String, ce afin de pouvoir nommer un fi Conversion hexadecimal -> decimal ( et contraire) en C [ par Arrakis ] Bonjour,Je ne connais pas de fonction pour realiser cette conversion du decimal vers l'hexa, si vous avez une idéemerciArrakis Convertir chaine de caractere -> decimal [ par LordBob ] Salut a tous, en fait je voudrai juste savoir comment est-ce ke l'on pouver convertir une chaine de caractère (ex: salut) en decimal... Voila, m CONVERTIR EN HEXADECIMAL [ par Matheus ] Bonjour !!!Je voulais savoir s'il existait une fonction contenue dans une librairie du C++ pour convertir des nombres d'une base à une autre, comme du String de la forme hexa ----> entier [ par siphilis ] bonjour,voila, j'aimerais convertir un string de la forme : "0x2f9" en entier. comment puis je faire?merci convertir chaque elements d'une AnsiString en entier [ par Taquilla1 ] salutJ'essaye en vain de convertir chaque élements d'une AnsiString  en entier, mais mon compilateur refuse de la convertir.Ma chaine est entrée manue Comment convertir de l'ascii représentant de l'hexa. en une valeur hexadecimal? [ par tomaok ] Bonjour,je cherche à récupérer des données hexadecimal de 1 octet enregistrées dans un fichier texte suivant ce format :  A57F6E3C...    donc sans esp Convertir Binaire > decimal et pas l'inverse [ par hop ] Bonjour,J'ai cherché dans le forum comment faire pour convertir un mot binaire en décimal (dans cet ordre et pas dans l'autre)et je n'ai pas trouvé do convertir tableau d'entier en chaine de caractere [ par bosmal ] bonjour, comment feriez vous pour transformer un tableau d'entier (int tab[8192]) en une chaine de caractere. ou autrement y a t il une fonction qui p Conversion d'entier en base 2^32 vers base 10 [ par le_duche ] Bonjour !Je chercher je cherche, mais je ne trouve pas d'idée.Dans le cadre de l'implémentation d'une classe de grands entiers, je souhaite pouvoir co


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,295 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales