Probleme de conversion binaire

montie_s Messages postés 6 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 28 janvier 2005 - 20 janv. 2005 à 23:53
gtlpcl Messages postés 4 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 29 janvier 2005 - 17 mai 2005 à 10:48
Je cree un programme capable de transformer les codes ascii de caracteres en leur equivalence en base 2, puis de reprendre ces nombre en binaire pour les retransformer en nombre en base 10 et pouvoir les reafficher a l'ecran.

J'ai reussi a realiser la 1ere etape, c'est a dire transformer un code ascii en binaire. Je stock mon resultat dans un tableau de char.
Mais je bloque pour transformer ce tableau contenant des '0' et des '1' en un int.
Merci de votre aide.


imotep !
A voir également:

12 réponses

bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
21 janv. 2005 à 00:37
un int c'est 32 zeros et uns pour une machine 32 bits...
0
montie_s Messages postés 6 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 28 janvier 2005
21 janv. 2005 à 00:54
oui je met sui mal exprimer , je ne cherche pa a recuperer un int

mais plutot le nombre en base 10 correspondant a la suite de 0 et 1 contenue dans mon tableau.

Cependant le choix de ne remplir que 8 cases est justifier car un code ascii n'est jamais superieur a 256 = 2^8
0
Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 1
21 janv. 2005 à 01:13
ben je sais pas ce que tu veux faire, mais si tu connais le caractere
de depart, pourquoi tu t'embetes avec une conversio binaire -> int
alors que tu peux simplement convertir les char en int avec la fction:
atoi...

http://www.cplusplus.com/ref/cstdlib/atoi.html



non??



pour ton prog t'as qu'a pas utilisé tes codes binaires, et utiliser atoi pour afficher l'ascii de ton caractere en base 10.
0
montie_s Messages postés 6 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 28 janvier 2005
21 janv. 2005 à 01:18
En fait j'ai 2 programmes, un client et un serveur ki tournent sur la meme machine

je rentre une chaine de caractere au client qui la converti en binaire
et l'envoi en temps reel au serveur a l'aide des signaux SIGUSR1 et
SIGUSR2. Le serveur doit alors effectuer l'operation inverse et
m'afficher ma chaine de caractere a partir du binaire --> c'est la
que je bloque, je recupere bien le binaire mais je ne comprend pas
comment le retranscrire en code ascii.
0

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

Posez votre question
Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 1
21 janv. 2005 à 10:30
sinon en cherchant un peu sur cppfrance-->http://www.cppfrance.com/code.aspx?ID=24539

ca ressemble pas mal à ton pb non? conversion binaire decimal.



par contre pour passer du flux binaire aux char, soit tu trouves un
truc tt fais, soit tu le code toi même en utilisant les opérateurs
binaires comme <<, >>, |, etc... puisque tu connais la
taille du flux que tu envoies ca devrait être faisable.

bon courage
0
cs_CurieuxDeSavoir Messages postés 7 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 23 décembre 2005
21 janv. 2005 à 16:12
char TabBinaire[8]; //ton tableau binaire
unsigned char Val[8];
int ValAscii; // la valeur de ton tableau binaire en int


// si ton tableau stock le caractere '0' ou '1' ( TabBinaire[0] = '1' ou TabBinaire[0] = '0' )
for(int i=0; i<8; i++)
{
if(TabBinaire[i] == '0') Val[i] = 0;
else Val[i] = 1;
}


ValAscii = 128*Val[7] + 64*Val[6] + 32*Val[5] + 16*Val[4]
+ 8*Val[3] + 4*Val[2] + 2*Val[1] + 1*Val[0] ;






// si ton tableau stock la valeur '0' ou '1' ( TabBinaire[0] = 1 ou TabBinaire[0] = 0 )
ValAscii = 128*TabBinaire[7] + 64*TabBinaire[6] + 32*TabBinaire[5]
+ 16*TabBinaire[4] + 8*TabBinaire[3]
+ 4*TabBinaire[2] + 2*TabBinaire[1] + 1*TabBinaire[0] ;



unsigned char ValeurCodeAscii ; // la valeur du code ascii 255 max
ValeurCodeAscii = (unsigned char)ValAscii;

Je n'ai pas tenu compte du poids fort faible des valeurs de ton tableau.
J'espere que ca repond a ta question.
0
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
21 janv. 2005 à 16:36
Désolé mais j'ai pas pu m'en empecher...

#include <cstdlib>
#include
#include <math.h>


using namespace std;


char* type2bin(char dec,char* bin)
{
int r = 8;//nb de cases binaires


memset(bin,'0',r); //par defaut le nb bin est nul
bin[r] = 0;


while(r--)
bin[r] = '0' + ((dec & (1 << r)) != 0);

return bin;
}


char bin2char(char* bin)
{
char dec = 0;
char* pos = bin;


while(pos < bin + 8)
{
dec += ((*pos - '0') * (1 << (pos - bin)));


pos++;
}
return dec;
}


int main(int argc,char* argv[],char* envp[])
{
char* salut = "Tout est ici...";

if(argc > 1)
salut = argv[1];


char blb[9];
char* cat = new char[strlen(salut)*8 + 1];


if(!cat)
return 1;


*cat = 0;



while(*salut)
{
//conversion du char en binaire
cout << *salut << " " << type2bin(*salut,blb);

//conversion du binaire en char
char c = bin2char(blb);
cout << " " << c << " " << hex << (int) c;
cout << endl;


strcat(cat,blb);


salut++;
}


cout << endl << "La chaine binaire complete..." << endl
<< cat << endl << "correspond a..." << endl;


salut = cat;


while(*salut)
{
cout << bin2char(salut);
salut += 8;
}
cout << endl;


delete [] cat;
return 0;
}
0
montie_s Messages postés 6 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 28 janvier 2005
23 janv. 2005 à 14:19
Merci de votre aide, je m'en suis sortit grâce à la methode de bayeto mais celle de CurieuxDeSavoir fonctionne tout aussi bien.
0
gtlpcl Messages postés 4 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 29 janvier 2005
28 janv. 2005 à 11:03
Salut à tous,







Très honnêtement, je ne vois pas l'intérêt d'une telle opération.

Si j'ai bien compris vos sources et problème, Le programma récupère une
chaîne de caractères par l'entrée standard, la vonvertit en binaire en
rangeant la valeur dans un tableau de caractères composé de '1' et '0'
(donc une autre chaîne de caractère dont la taille est supérieure à la
taille de la chaîne avant convertion) pour la reconvertir dans le
format original.



Finalement, tu convertit une chaîne de caractère en une autre chaîne,
plus grande, pour la remettre dans la même situation qu'avant.

Je ne vois pas très bien le but de l'opération, mais il me semble que cette famause convertion ne soit pas très performante

Bien à vous.



PCL

-- Il n'y a pas de problèmes, il n'y a que des solutions. C'est mathématique. --
0
montie_s Messages postés 6 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 28 janvier 2005
28 janv. 2005 à 16:56
Mon but etait de creer 2 programmes; 1 client et un serveur; et le client devait etre capable de communiquer des chaine de caractere au serveur grace uniquement aux 2 signaux SIGUSR1 et SIGUSR2. Je devait donc convertir ma chaine de caractere en binaire, l'envoyer au serveur grace aux signaux puis la tache du serveur etait de reconvertir en base 10 et d'afficher la chaine sans l'alterer.
Mais je suis d'accord que de stocker la valeur binaire dans un tableau est loin d'etre la meilleur facon de faire ca, j'ai finalement utiliser une methode bien plus pratique.

blob
- imotep ! -
0
nawsa Messages postés 3 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 18 mai 2005
17 mai 2005 à 09:24
salut tout le monde est-ce que quelqu'un pourrait m'aider à convertit une chaine de caractère en binaire en utilisant le language C.
merci d'avance!!
0
gtlpcl Messages postés 4 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 29 janvier 2005
17 mai 2005 à 10:48
Salut nawsa,



Sous quelle forme veux-tu ton résultat...

Si tu le veux sous forme d'une autre chaîne de caractères... Alors la solution se trouve au-dessus...

Sinon....

A+.

PCL




PCL


-- Il n'y a pas de problèmes, il n'y a que des solutions. C'est mathématique. --
0
Rejoignez-nous