[C] Convertisseur Decimal <-> Binaire

Convertisseur Decimal <-> Binaire [C] - Programmation

Marsh Posté le 21-02-2001 à 16:08:42    

Salut tout le monde,
 
Est-ce que quelqu'un saurait comment coder une fonction convertissant un nombre decimal (un code ascii en l'occurence) en un nombre binaire, et vice-versa?
 
Merci d'avance.

Reply

Marsh Posté le 21-02-2001 à 16:08:42   

Reply

Marsh Posté le 21-02-2001 à 16:22:46    

C'est pas très précis, ne sachant pas sous quelle forme est la source du problème : si tu as une variable int il suffit d'écrire
printf("%x\n", entier) ; pour l'afficher en hexa.
 
Si tu as un char * désignant un entier c'est
printf("%x\n", atoi(string)) ;
 
Dans l'autre sens c'est un peu plus chaud il faut que tu parses toi même la string.


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
Reply

Marsh Posté le 21-02-2001 à 16:29:40    

Ben voila le probleme:
Je dois ecrire deux programmes, un serveur et un client, communiquant uniquement a l'aide des signaux SIGUSR1 et SIGUSR2. Le but est que le client puisse transmettre du texte au serveur qui va l'afficher. Je pensais faire en sorte que le client transmette le code ascii des caracteres en binaire un a un, puis que le serveur les recupere, reconvertisse le binaire en code ascii et affiche le resultat.
La partie communication par signaux ne pose pas de probleme, il ne me reste plus qu'a arriver a convertir les codes ascii vers/du binaire.
 
Voila, j'espere que c'est plus clair.

Reply

Marsh Posté le 21-02-2001 à 16:40:56    

Là c'est moi qui décroche. Comment tu transmets des données par signaux ? Avec un pipe ou un tube nommé c'est plus simple mais bon....
 
1) Tu transmets quoi, du texte "coucou maman ?" ou "123456789". Combien de caractères à chaque fois ?
 
2) ton problème est où ? Quand tu envoies les données ou quand tu les reçois pour les afficher ?


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
Reply

Marsh Posté le 21-02-2001 à 16:48:33    

Justement, le probleme est qu'on peut pas transmettre des donnees par signaux. D'ou:
 
[tenkei@struct]./client 12345 "coucou maman"
 
12345 est le PID du serveur, on s'en occupe pas.
Le client prend la chaine "coucou maman", convertit la valeur ASCII du premier caractere en binaire (au hasard, "c" = 52 = 01101011) et envoie des signaux au serveur en fonction du resultat binaire.
 
Quand le serveur recoit SIGUSR1, il l'interprete comme un 0, quand il recoit SIGUSR2 il l'interprete comme un 1. Ainsi on arrive en theorie a reconstruire la valeur en binaire du code ASCII du premier caractere, qu'on convertit en decimal et qu'on affiche.  
 
Puis on repete tout ca pour les autres caracteres de la chaine.

Reply

Marsh Posté le 21-02-2001 à 17:06:02    

Tu aurais expliqué cela dès le début on aurait gagné un temps précieux.
 
Bah tu prends une grosse variable globale dans le serveur que tu initialise à 0. Un bon gros truc genre un méga tableau de char avec un indice ou si tu tiens à faire du C++ tu fous ça dans une classe qui a entre autres la méthode addbit(int) que tu appelles avec 0 ou 1 depuis les fonctions qui sont appelées quand SIGUSR1&2 sont déclenchés.
 
A chaque fois que tu reçois un bit (à toi de voir si le client commence par le bit de poids le plus élevé ou le plus faible), tu utilises les décalages de bits en C avec un ou de la valeur en paramètre par exemple
 
void CTampon::addBit(char val)
// Ajout d'un bit de poids plus faible que le précédent ou d'un bit d'un nouvel octet
{
   if ( _nbBitsRecus == 8 )
   {
      _nbBitsRecus = 1 ;
      _indiceTab++ ;
   } /* if -octet suivant- */
   else
      _nbBitsRecus++ ;
 
   _tab[_indiceTab]<<2 | val ; /* pas sûr de la syntaxe */
}
 
A chaque fois tu reçois 8 appels tu passes sur une autre case du tableau. Et oh miracle tu récupères les caractères sans autre conversion.
 
QQch dans le genre.


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
Reply

Marsh Posté le 21-02-2001 à 18:23:14    

il y a des profd qui savent plus trop quoi inventer :sweat:


---------------
http://www.cheata.net le site qui vous donne la banane!
Reply

Marsh Posté le 22-02-2001 à 09:33:03    

Ben vi je me suis planté : il faut lire <<1 (décalage de 1 à gauche) et non <<2.
 
Après je pense qu'il n'y a pas besoin d'affectation. Si j'ai le temps je vais essayer de me programmer ça, ça a l'air marrant.


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
Reply

Sujets relatifs:

Leave a Replay

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