caractère --> binaire

caractère --> binaire - C++ - Programmation

Marsh Posté le 11-02-2006 à 17:17:11    

bonjour à tous,
 
 
J'aimerais savoir s'il existe une fonction qui permettrait de transformer un caractère en sa valeur binaire. ( et inversement )
 
Je m'explique, j'ai un fichier de texte et je souhaite effectuer des opérations comme une inversion de deux bits par exemple, j'ai donc besoin de transformer les caractères du texte en binaire, puis une fois que toutes ces opérations sont faites le retransformer en fichier texte. ( je travaille sous unix ).
 
Merci

Reply

Marsh Posté le 11-02-2006 à 17:17:11   

Reply

Marsh Posté le 12-02-2006 à 02:39:23    

C'est une question classique, mais qui n'a pas de réponse, car pour un ordinateur tout est déjà en binaire (sauf pour un ordinateur ternaire ou analogique (mais ça ne court pas les rues (sauf si ce sont des robots (ok, je m'arrête)))).
 
Un caratère est un octet (sauf...). Il contient huit valeurs binaires. Il n'y pas de conversion à faire.
Cependant, s'il faut extraire un bit, il faut faire quelque chose, par exemple, utiliser la technique du masquage et du décalage.
Par exemple, si le bit à récupérer est le 3ème :

char c;
int val_bin3;
c = -107; //par exemple
val_bin3 = c & 0x4 >> 2;

Pour injecter une valeur binaire dans un octet, on peut utiliser l'opérateur booléen | (ou) ou & (et).
Mais pour échanger deux bits, il y a aussi d'autres méthodes, dont certaines ne nécessitent pas d'extraire et d'injecter des bits. On peut parfois se débrouiller avec des opérations arithmétiques plutôt qu'avec des opérations booléennes.

Message cité 1 fois
Message édité par olivthill le 12-02-2006 à 02:40:59
Reply

Marsh Posté le 12-02-2006 à 10:21:48    

et si tes char sont pas signés ?

Reply

Marsh Posté le 12-02-2006 à 16:28:39    

ok merci ca devrait passer comme ca

Reply

Marsh Posté le 14-02-2006 à 20:36:26    

olivthill a écrit :

val_bin3 = c & 0x4 >> 2;



=> val_bin3 = c & 1;
 

Reply

Marsh Posté le 14-02-2006 à 20:57:18    

Pour le troisième bit (pas pour le premier, il faut lire avant de critiquer), le masque est réalisé en prenant 2 puissance (3 - 1), d'où 4, puis décallage deux pas vers la droite pou obtenir 1 ou 0. CQFD.

Reply

Marsh Posté le 14-02-2006 à 21:03:41    

olivthill a écrit :

Pour le troisième bit (pas pour le premier, il faut lire avant de critiquer), le masque est réalisé en prenant 2 puissance (3 - 1), d'où 4, puis décallage deux pas vers la droite pou obtenir 1 ou 0. CQFD.


 
oui mais >> est prioritaire sur &, 0x4 >> 2 est évalué en premier et on en arrive bien à  
val_bin3 = c & 1;

Reply

Marsh Posté le 14-02-2006 à 21:07:20    

Alors j'ai oublié des parenthèses. Bien vu skelter !

Reply

Marsh Posté le 14-02-2006 à 21:26:44    

merci j'ai réussi, ca marche nickel

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed