Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1629 connectés 

  FORUM HardWare.fr
  Programmation

  [C] Convertisseur Decimal <-> Binaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Convertisseur Decimal <-> Binaire

n°15238
tenkei
Posté le 21-02-2001 à 16:08:42  profilanswer
 

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.

mood
Publicité
Posté le 21-02-2001 à 16:08:42  profilanswer
 

n°15246
Toxin
Carpe ★★ Vitam
Posté le 21-02-2001 à 16:22:46  profilanswer
 

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
n°15250
tenkei
Posté le 21-02-2001 à 16:29:40  profilanswer
 

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.

n°15255
Toxin
Carpe ★★ Vitam
Posté le 21-02-2001 à 16:40:56  profilanswer
 

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
n°15256
tenkei
Posté le 21-02-2001 à 16:48:33  profilanswer
 

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.

n°15262
Toxin
Carpe ★★ Vitam
Posté le 21-02-2001 à 17:06:02  profilanswer
 

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
n°15272
Roswell_
Posté le 21-02-2001 à 18:23:14  profilanswer
 

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


---------------
http://www.cheata.net le site qui vous donne la banane!
n°15338
Toxin
Carpe ★★ Vitam
Posté le 22-02-2001 à 09:33:03  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C] Convertisseur Decimal <-> Binaire

 

Sujets relatifs
operation binaire en C ....binaire, latin
Plus de sujets relatifs à : [C] Convertisseur Decimal <-> Binaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR