Convertion de symbole en entier

Résolu
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 avril 2008 - 12 mars 2008 à 11:02
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 - 12 mars 2008 à 12:13
Bonjour à tous,


 


Voici mon problème : lorsque j'affiche les octets constituant un flux élémentaire d'une vidéo (tel que le ferait un éditeur hexadécimal), je n'obtiens pas des octets mais des symboles bizarroïdes..

Quelqu'un sait si il existe une conversion possible pour "traduire" ces symboles en valeur numériques ? j'ai pensé à la fonction atoi() mais lorsque j'utilise cette dernière, ça me donne l'erreur de compilation suivante :

C:\Documents and Settings\dgombert\Bureau\Editeur Hexa\Edit_Hex.cpp(51) : error C2664: 'atoi' : cannot convert parameter 1 from 'char' to 'const char *'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

Quelqu'un a une idée ?

Bonne journée à tous!

6 réponses

cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
12 mars 2008 à 11:31
Les octets sont affichés par un printf() ?
Si c'est le cas tout dépend du type de formatage qu'il contient et vu l'erreur sur la tentative de atoi il s'agit d'un char à présenter :

char octet_du_flux;
...
printf("%c",octet_du_flux); --> caractère ASCII correspondant au code lu (ce qui ressemble au cas)
printf("%d",octet_du_flux); --> code ASCII décimal du code lu
printf("%x",octet_du_flux); --> code ASCII hexadécimal du code lu
("%02x" pour formater sur 2 caractères, x --> a ... f, X --> A ... F)

Ex: "%c" --> J   "%d" --> 74   "%X" --> 4A
Jean-François
3
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
12 mars 2008 à 11:12
Salut
Je pense que la fonction de BruNews correspond parfaitement a ce que tu veux faire.
http://www.cppfrance.com/codes/CHAINE-HEXA-WIN32_46019.aspx

Mon site internet : http://pistol.petesampras.free.fr
0
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 avril 2008
12 mars 2008 à 11:19
y a pas quelquechose de plus simple, en plus son code c'est de l'assembleur...

G vu que Neo porposait un code similaire en C mais je ne peux acceder à sa page ..

Jpensais que c'était juste un problème de conversion...
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
12 mars 2008 à 11:41
Tu n'es pas obligé de savoir comment est code cette fonction, tu peux simplement l'utiliser...
Mais tu peux etre certain qu'il s'agit d'un code correcte et optimisé, car venant de Brunews.

Mon site internet : http://pistol.petesampras.free.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 avril 2008
12 mars 2008 à 11:50
Ok merci Vincent et JFrancois !!!
Je vous remercie de m'aider, vous êtes très sympaaaa !!!!!
Alors, j'ai testé le conseil de JF, et oui, c'était bien ça "%x" dans le printf !
Mais attendez  c'est pas encore ça
Regardez ce que j'obtiens:

0xffffff9d
0xffffffeb
0xf
0xffffffe3
0x4
0xffffffc8
0xffffff9c
...
etc
...

Vous l'aurez compris, je ne vois pas pourquoi ces "f" s'incrustent .... grrrrrr... on touche au bout du problème..!
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
12 mars 2008 à 12:13
Au delà de 7F (ou à partir de F0, c'est à dire quand le bit de poids fort passe à 1) le char est considéré comme négatif et ca donne cette valeur sur 8 chiffres hexadécimaux complété avec des F.



void main()
{
   char code_du_flux = 0xF0;
   printf("%02X",code_du_flux); --> FFFFFFF0
}


Il faut passer en caractères non signés soit en 'castant' soit à la déclaration :

void main()
{
   char code_du_flux = 0xF0;
   printf("%02X",(unsigned char)code_du_flux); --> F0
}

ou

void main()
{
   unsigned char code_du_flux = 0xF0;
   printf("%02X",code_du_flux); --> F0
}

Jean-François
0
Rejoignez-nous