Convertion de symbole en entier

[Résolu]
Signaler
Messages postés
96
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
25 avril 2008
-
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
-
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

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
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
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
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
Messages postés
96
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
25 avril 2008

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...
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
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
Messages postés
96
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
25 avril 2008

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..!
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
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