Besoin d'aide Langage binaire et héxadécimale
Fermé
Danielle Paquet
-
1 oct. 2001 à 22:58
saif87 Messages postés 109 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 2 juin 2011 - 21 janv. 2009 à 16:42
saif87 Messages postés 109 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 2 juin 2011 - 21 janv. 2009 à 16:42
A voir également:
- Besoin d'aide Langage binaire et héxadécimale
- Langage binaire - Guide
- Langage ascii - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Alphabet binaire ✓ - Forum Programmation
16 réponses
olé, quel vaste sujet que le codage de valeurs dans différentes bases !
bon, je vais essayer de t'aider un peu. :)
1. Il vaut bien faire la distinction entre une valeur et sa représentation. Pour représenter une valeur, on utilise des chiffres. Le chiffre de gauche est dit "de poids fort", celui de droite est dit "de poid faible". Cela signifie qu'un même chiffre (représentation) aura une valeur plus forte à gauche qu'à droite. Le rapport de valeur entre deux chiffres juxtaposés est appelé la base. Soit une représentation Aa (où A et a sont deux chiffres) dans la base b, A possède b-fois plus de valeur que a. Un exemple concret : dans le nombre 11, il y a deux signes identique (1 et 1). Si on est en base 10, le 1 de gauche a 10 fois plus de valeur que le 1 de droite. Pour calculer la valeur de la représentation "11", on fait 1*10 + 1 = 11. Il est à noté que la valeur est notée ... en base 10, puique qu'il faut bien la représenter d'une manière ou d'une autre . De même la base est notée en base 10.
2. Pour connaitre la valeur réelle d'un nombre, on applique la méthode vu précédemment, et dont Mister BeeGee parle.
Soit la représentation XYZ en base b : valeur = X*b^2 + Y*b^1 + Z*b^0. La valeur est toujours notée en base 10 de sorte que valeur = représentation(10). Pour convertir une représentation, de n'importe quelle base en base 10, il suffit de connaitre sa valeur.
(voir la réponse de Mister BeeGee pour l'application pratique)
3. Pour convertir dans une autre base que la base 10, la méthode est quasi similaire. Il faut, dans un premier temps utiliser l'écriture : XYZ(b) => X*b^2 + Y*b^1 + Z*b^0 A partir de la, une solution simple consiste à convertir tous les éléments de cette expression dans la base de destination (écrire l'expression en puissances de la base). Un petit exemple : on veut convertir 191 de la base 16 à la base 2 : 191(16) => 1.16^2+9.16^1+1.16^0 = 2^0.(2^4)^2+(2^4+2^0).2^3+2^0.2^0 = 2^0.2^8+2^7+2^3+2^0 = 2^8+2^7+2^3+2^0 => 110010001(2)
4. Pour convertir de la base 10, vers n'importe quelle base, il suffit de diviser le nombre en base 10, par la base destination, puis de répéter la division avec le résultat de la division précédente, etc. Le résultat est la concaténation des restes de ces divisions successives, en les lisant dans l'ordre INVERSE. C'est l'exemple de ton livre. On veut convertir 57 de la base 10 à la base 16 :
57/16 = 3, reste 9
3/16 = 0, reste 3
donc 57(10) = 39(16)
5. Une petite astuce, pour éviter de se lancer dans des calcul pour rien. Un nombre binaire est noté du type 11110000. tu peux couper ce nombre en deux parties 1111 (poids fort) et 0000 (poids faible) chacune de ces parties correspond à un chiffre hexa (1111 : F, 0000 : 0) Donc la représentation de 11110000(2) est F0(16). Idem pour passer de la base 16 à la base 2.
Voila tu sais faire les convertions de base suivantes :
16 <-> 2 (par groupe de quatres bits)
b -> 10 (décomposer en puissances de 10)
10 -> b (diviser par b)
b -> C (décomposer en puissances de 10 puis convertir en puissances de c)
j'espère t'avoir aidé. Surtout n'ai pas peur si tu ne comprends pas tout dès le premier coup, c'est normal, c'est super abstrait comme sujet. Il faut que tu t'amuses à faire des convertions dans tous les sens, d'essayer plusieurs méthodes et surtout de garder en tête la distinction entre valeur et représentation de cette valeur.
it's you to play now ! :)
Yoann
bon, je vais essayer de t'aider un peu. :)
1. Il vaut bien faire la distinction entre une valeur et sa représentation. Pour représenter une valeur, on utilise des chiffres. Le chiffre de gauche est dit "de poids fort", celui de droite est dit "de poid faible". Cela signifie qu'un même chiffre (représentation) aura une valeur plus forte à gauche qu'à droite. Le rapport de valeur entre deux chiffres juxtaposés est appelé la base. Soit une représentation Aa (où A et a sont deux chiffres) dans la base b, A possède b-fois plus de valeur que a. Un exemple concret : dans le nombre 11, il y a deux signes identique (1 et 1). Si on est en base 10, le 1 de gauche a 10 fois plus de valeur que le 1 de droite. Pour calculer la valeur de la représentation "11", on fait 1*10 + 1 = 11. Il est à noté que la valeur est notée ... en base 10, puique qu'il faut bien la représenter d'une manière ou d'une autre . De même la base est notée en base 10.
2. Pour connaitre la valeur réelle d'un nombre, on applique la méthode vu précédemment, et dont Mister BeeGee parle.
Soit la représentation XYZ en base b : valeur = X*b^2 + Y*b^1 + Z*b^0. La valeur est toujours notée en base 10 de sorte que valeur = représentation(10). Pour convertir une représentation, de n'importe quelle base en base 10, il suffit de connaitre sa valeur.
(voir la réponse de Mister BeeGee pour l'application pratique)
3. Pour convertir dans une autre base que la base 10, la méthode est quasi similaire. Il faut, dans un premier temps utiliser l'écriture : XYZ(b) => X*b^2 + Y*b^1 + Z*b^0 A partir de la, une solution simple consiste à convertir tous les éléments de cette expression dans la base de destination (écrire l'expression en puissances de la base). Un petit exemple : on veut convertir 191 de la base 16 à la base 2 : 191(16) => 1.16^2+9.16^1+1.16^0 = 2^0.(2^4)^2+(2^4+2^0).2^3+2^0.2^0 = 2^0.2^8+2^7+2^3+2^0 = 2^8+2^7+2^3+2^0 => 110010001(2)
4. Pour convertir de la base 10, vers n'importe quelle base, il suffit de diviser le nombre en base 10, par la base destination, puis de répéter la division avec le résultat de la division précédente, etc. Le résultat est la concaténation des restes de ces divisions successives, en les lisant dans l'ordre INVERSE. C'est l'exemple de ton livre. On veut convertir 57 de la base 10 à la base 16 :
57/16 = 3, reste 9
3/16 = 0, reste 3
donc 57(10) = 39(16)
5. Une petite astuce, pour éviter de se lancer dans des calcul pour rien. Un nombre binaire est noté du type 11110000. tu peux couper ce nombre en deux parties 1111 (poids fort) et 0000 (poids faible) chacune de ces parties correspond à un chiffre hexa (1111 : F, 0000 : 0) Donc la représentation de 11110000(2) est F0(16). Idem pour passer de la base 16 à la base 2.
Voila tu sais faire les convertions de base suivantes :
16 <-> 2 (par groupe de quatres bits)
b -> 10 (décomposer en puissances de 10)
10 -> b (diviser par b)
b -> C (décomposer en puissances de 10 puis convertir en puissances de c)
j'espère t'avoir aidé. Surtout n'ai pas peur si tu ne comprends pas tout dès le premier coup, c'est normal, c'est super abstrait comme sujet. Il faut que tu t'amuses à faire des convertions dans tous les sens, d'essayer plusieurs méthodes et surtout de garder en tête la distinction entre valeur et représentation de cette valeur.
it's you to play now ! :)
Yoann
eheh, non pas encore ... ;)
Souviens-toi : pour convertir n'importe quelle base en base 1O ( =base décimale), tu dois développer ta représentation en "somme de chiffres multipliés par la puissance de la base correspondant".
pour convetir 256 de la base 16 à la base 10 :
256(16) = 2.16^2 + 5.16^1 + 6.16^0
= 2.256 + 5.16 + 6
= 512 + 8 + 6
= 598(10)
C'est la même valeur représentée dans deux bases différentes.
De même pour convertir de la base 2 à la base 10
1010110000(2) = 1.2^9 + 0.2^8 + 1.2^7 + 0.2^6 + 1.2^5 + 1.2^4 + 0.2^3 + 0.2^2 + 0.2^1 + 0.2^0
= 2^9 + 2^7 + 2^5 + 2^4
= 512 + 128 + 32 + 16
= 688(10)
idem, i l s'agit de la même valeur, mais utilisant deux représentation différentes
Essaie encore de faire des exercices, ça viendra petit à petit.
Ce n'est pas facile du premier coup et c'est normal car c'est super abstrait comme notion.
good luck
Yoann
Souviens-toi : pour convertir n'importe quelle base en base 1O ( =base décimale), tu dois développer ta représentation en "somme de chiffres multipliés par la puissance de la base correspondant".
pour convetir 256 de la base 16 à la base 10 :
256(16) = 2.16^2 + 5.16^1 + 6.16^0
= 2.256 + 5.16 + 6
= 512 + 8 + 6
= 598(10)
C'est la même valeur représentée dans deux bases différentes.
De même pour convertir de la base 2 à la base 10
1010110000(2) = 1.2^9 + 0.2^8 + 1.2^7 + 0.2^6 + 1.2^5 + 1.2^4 + 0.2^3 + 0.2^2 + 0.2^1 + 0.2^0
= 2^9 + 2^7 + 2^5 + 2^4
= 512 + 128 + 32 + 16
= 688(10)
idem, i l s'agit de la même valeur, mais utilisant deux représentation différentes
Essaie encore de faire des exercices, ça viendra petit à petit.
Ce n'est pas facile du premier coup et c'est normal car c'est super abstrait comme notion.
good luck
Yoann
Si c'est pas trop tard !
En système décimal :
2543 = (2*10^3)+(5*10^2)+(4*10^1)+(3*10^0)
^ signifie élévation à la puissance
en plus simple :
2543 = (2*1000)+(5*100)+(4*10)+(3)
En système hexadécimal
191 = (1*16^2)+(9*16^1)+(1*16^0)
en plus simple :
191 = (1*256)+(9*16)+(1)
En système décimal :
2543 = (2*10^3)+(5*10^2)+(4*10^1)+(3*10^0)
^ signifie élévation à la puissance
en plus simple :
2543 = (2*1000)+(5*100)+(4*10)+(3)
En système hexadécimal
191 = (1*16^2)+(9*16^1)+(1*16^0)
en plus simple :
191 = (1*256)+(9*16)+(1)
pique
Messages postés
7
Date d'inscription
lundi 1 octobre 2001
Statut
Membre
Dernière intervention
1 novembre 2001
2 oct. 2001 à 14:37
2 oct. 2001 à 14:37
Pourquoi dans mon livre le nombre 57 en hexadécimale converti en base décimale est 39
Il font 57/16=3+9
3/16=0+3
je ne comprends pas.
De plus convertir le nombre 11110000 binaire en base décimale
J'ai fais (1*2^7)+(1*2^6)+(1*2^5)+(1*2^4)+(0*2^3)+(0*2^2)+(0*2^1)+(0*2^0)=128+64+32+16
=240base 14
est-ce que ma base 14 est correcte j'ai fait le totale des base que est 22 -8=14 ???????
Il font 57/16=3+9
3/16=0+3
je ne comprends pas.
De plus convertir le nombre 11110000 binaire en base décimale
J'ai fais (1*2^7)+(1*2^6)+(1*2^5)+(1*2^4)+(0*2^3)+(0*2^2)+(0*2^1)+(0*2^0)=128+64+32+16
=240base 14
est-ce que ma base 14 est correcte j'ai fait le totale des base que est 22 -8=14 ???????
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
25 févr. 2006 à 13:13
25 févr. 2006 à 13:13
Pour m'amuser un peu voilà ta question en binaire
[lamitest@localhost my_perl_script]$ perl dec2bin2dec.pl slt jaurai une question :estce que l'on peut peut ecrire un mot en binaire en binaire : 1110011 1101100 1110100 100000 1101010 1100001 1110101 1110010 1100001 1101001 100000 1110101 1101110 1100101 100000 1110001 1110101 1100101 1110011 1110100 1101001 1101111 1101110 100000 111010 1100101 1110011 1110100 1100011 1100101 100000 1110001 1110101 1100101 100000 1101100 100111 1101111 1101110 100000 1110000 1100101 1110101 1110100 100000 1110000 1100101 1110101 1110100 100000 1100101 1100011 1110010 1101001 1110010 1100101 100000 1110101 1101110 100000 1101101 1101111 1110100 100000 1100101 1101110 100000 1100010 1101001 1101110 1100001 1101001 1110010 1100101 Reconversion de ta question de binaire vers affichage normal : slt jaurai une question :estce que l'on peut peut ecrire un mot en binaire
saif87
Messages postés
109
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
2 juin 2011
2 nov. 2008 à 13:29
2 nov. 2008 à 13:29
merci lami20j
donc récapitulant pour une chaine de caractères il faut retourner tout les caractères en code ASCII puis convertir ces nombre en binaire .
est ce qu'il ya une fonction en c qui donne le code ASCII des caractères
merci bien
donc récapitulant pour une chaine de caractères il faut retourner tout les caractères en code ASCII puis convertir ces nombre en binaire .
est ce qu'il ya une fonction en c qui donne le code ASCII des caractères
merci bien
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
saif87
Messages postés
109
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
2 juin 2011
2 nov. 2008 à 13:36
2 nov. 2008 à 13:36
Salut,
Le langage C ne possède pas une fonction pour retourner le code ASCII d'un caractère.
Il suffit d'affecter un char à un int.
Le langage C ne possède pas une fonction pour retourner le code ASCII d'un caractère.
Il suffit d'affecter un char à un int.
lami20j@debian:~/trash$ cat ccm5.c #include<stdio.h> int main() { char c; int code; printf("Caractère? "); c=getchar(); code=c; printf("%c : %d\n",c,code); return 0; } lami20j@debian:~/trash$ gcc ccm5.c lami20j@debian:~/trash$ ./a.out Caractère? A A : 65
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
saif87
Messages postés
109
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
2 juin 2011
2 nov. 2008 à 14:01
2 nov. 2008 à 14:01
Re,
Voici un exemple en C
Voici un exemple en C
lami20j@debian:~/trash$ cat ccm6.c #include<stdio.h> void dec2bin(char *bin,int nb); int main() { char s[100],bin[32]; char *p; int i; printf("Chaine? "); fgets(s,99,stdin); p=s; while (*p != '\n'){ dec2bin(bin,*p); printf("%s",bin); ++p; } printf("\n"); return 0; } void dec2bin(char *bin,int nb){ int i,j,k,tmp; for(i=0;nb != 0;nb >>= 1){ if(nb & 01) bin[i++] = '1'; else bin[i++] = '0'; } bin[i]='\0'; for(j=0,k=i-1;j<k;++j,--k){ tmp=bin[j]; bin[j]=bin[k]; bin[k]=tmp; } } lami20j@debian:~/trash$ gcc ccm6.c lami20j@debian:~/trash$ ./a.out Chaine? Le mots rom1 en binaire 100110011001011000001101101110111111101001110011100000111001011011111101101110001100000110010111011101000001100010110100111011101100001110100111100101100101 lami20j@debian:~/trash$
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pique
Messages postés
7
Date d'inscription
lundi 1 octobre 2001
Statut
Membre
Dernière intervention
1 novembre 2001
2 oct. 2001 à 17:53
2 oct. 2001 à 17:53
Je commence à comprendre, j'apprécie tes explications
57/16 = 3, reste 9 ou trouves -tu le 9???????????
3/16 = 0, reste 3
donc 57(10) = 39(16)
Alors 191 en décimale converti en hexadécimal serait
191/16=11 comment trouver le reste????
Danielle
57/16 = 3, reste 9 ou trouves -tu le 9???????????
3/16 = 0, reste 3
donc 57(10) = 39(16)
Alors 191 en décimale converti en hexadécimal serait
191/16=11 comment trouver le reste????
Danielle
Bobinours
Messages postés
2898
Date d'inscription
jeudi 26 avril 2001
Statut
Membre
Dernière intervention
21 mars 2013
504
3 oct. 2001 à 03:29
3 oct. 2001 à 03:29
D'après moi, soit ils se sont trompés dans ton livre, soit tu as mal lu.
C'est l'inverse. 57 DECIMAL -----donne-----> 39 DECIMAL
Pour vérifier, tu prends ta calculette (t'es sous Windows j'espère), tu la passes en mode scientifique. Ensuite tu cliques sur DEC (decimal par défaut). Rentre 57 puis cliques sur HEX... ça donne 39.
Non, ce n'est pas en base 14.
Le procédé (1*x^7)+(1*x^6)+(1*x^5)+(1*x^4)+(0*x^3)+(0*x^2)+(0*x^1)+(0*x^0) permet de transformer de la base x vers la base 10 (décimal). Je n'ai pas compris d'où sort le calcul 22-8=14 ?
-= Bobinours =-
C'est l'inverse. 57 DECIMAL -----donne-----> 39 DECIMAL
Pour vérifier, tu prends ta calculette (t'es sous Windows j'espère), tu la passes en mode scientifique. Ensuite tu cliques sur DEC (decimal par défaut). Rentre 57 puis cliques sur HEX... ça donne 39.
Non, ce n'est pas en base 14.
Le procédé (1*x^7)+(1*x^6)+(1*x^5)+(1*x^4)+(0*x^3)+(0*x^2)+(0*x^1)+(0*x^0) permet de transformer de la base x vers la base 10 (décimal). Je n'ai pas compris d'où sort le calcul 22-8=14 ?
-= Bobinours =-
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
25 févr. 2006 à 13:06
25 févr. 2006 à 13:06
Re,
Une petite modification pour enlever les 00000... au début qui ne servent à rien.
J'ai modifié les 2 fonctions.
Le résultat :
Une petite modification pour enlever les 00000... au début qui ne servent à rien.
J'ai modifié les 2 fonctions.
#! /usr/bin/perl use warnings; use strict; #Description: conversion binaire/décimal & décimal/binaire # décimal en binaire sub dec2bin { my$bin = unpack ("B32", pack("N",shift)); $bin =~ s/^0+(?=\d)//g; return $bin; } # binaire en décimal sub bin2dec { return unpack("N", pack("B32",substr("0" x 32 . shift,-32))); } # rom1 en binaire # obtenir le code ASCII des caractères # ensuite conversion en binaire my $nom_bin = join " ", map { dec2bin($_) } unpack("C*","rom1"); print "Le mots rom1 en binaire\n$nom_bin\n"; #reconversion en caractère my $nom = join "",map { chr(bin2dec($_)) } split " ",$nom_bin; print "Reconversion de mot rom1 de binaire vers affichage normal : $nom\n";
Le résultat :
[lamitest@localhost my_perl_script]$ perl dec2bin2dec.pl Le mots rom1 en binaire 1110010 1101111 1101101 110001 Reconversion de mot rom1 de binaire vers affichage normal : rom1 [lamitest@localhost my_perl_script]$
slt j'aimerais savoir pour la conversion des lettres cmt on fait ?est ce qu'il faut apprendre ce qu'il y a dans le cours betement ou quoi? s'il vous plait répondez moi j'ai un examen demain please et merci d'avance
Aimery1
Messages postés
111
Date d'inscription
dimanche 13 mars 2005
Statut
Membre
Dernière intervention
14 mars 2010
11
28 juin 2007 à 21:22
28 juin 2007 à 21:22
ba oui fo lapredre par coeur mais sa se sui ossi non ya des programes
J'ai besoin d'un programme pascal qui permet la coversion d'une base à une autre ;
merci;
si vous pouvez l' envoyer sur mon mail : miouthcosmos@live.com ;
merci;
; ) : )
merci;
si vous pouvez l' envoyer sur mon mail : miouthcosmos@live.com ;
merci;
; ) : )
J'ai besoin d'un programme pascal qui permet la coversion d'une base à une autre ;
merci;
si vous pouvez l' envoyer sur mon mail : miouthcosmos@live.fr ;
merci;
; ) : )
merci;
si vous pouvez l' envoyer sur mon mail : miouthcosmos@live.fr ;
merci;
; ) : )
zaien
Messages postés
2
Date d'inscription
mercredi 21 janvier 2009
Statut
Membre
Dernière intervention
21 janvier 2009
21 janv. 2009 à 14:52
21 janv. 2009 à 14:52
SALUT
j ai un pb
comment je peux convertir un code binaire en code ASCII
jai essayé mais le programme n'a pas marché svp je veux 1 exenple en c
(si j'ai n bits par exemple)
j ai un pb
comment je peux convertir un code binaire en code ASCII
jai essayé mais le programme n'a pas marché svp je veux 1 exenple en c
(si j'ai n bits par exemple)
saif87
Messages postés
109
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
2 juin 2011
21 janv. 2009 à 16:42
21 janv. 2009 à 16:42
Bonjour
voici une parti de mon projet(reseau)cette parti vous montre la conversion en binaire d'une chaine de carctere et réciproquement a propos de la probabilite tu peut l'enlever (pour mon code met la probabilite a 99)
Donc tu doit réctifier le code en enlevant la probabilite et tu met le codage sur 8 bit
bon chance.
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<math.h>
int t[100],v=0,t2[100];
void codebinaire(char s[])
{
int i,a,t1[100],t2[100],j=0,k=0,temp,p=0,w=0,b,ss,f;
double x,z;
char chr,message;
for(i=0;i<strlen(s);i++)
{
a=s[i];//affectation cert a determiner le code ascii afin du calculer le code binaire
printf("le code ASCII de %c est %d \n",s[i],a);
while(a>0)//determination du code binaire
{
t1[j]=a%2;
a/=2;
j++;
}
for(p=j-1;p>j/2;p--)//invertion du tableau pour obtenir le code binaire correcte
{
temp=t1[p];
t1[p]=t1[k];
t1[k]=temp;
k++;
}
k=0;
for(j=v;j<v+7;j++)//stockage du code binire d'un caractere dans le tableau globale
{
t[j]=t1[w];
w++;
}
w=0;
j=0;
v+=7;
}
printf("\n le code binaire de votre message est \n");
for(i=0;i<v;i++)
{
printf("%d",t[i]);
}
}
void prob(double x)
{
int i,b;
double z;
printf("\n votre probabilite est %.2lf %%\n",x);
printf("\n votre nouvelle probabilite est %.0lf\n ",x*100);
printf("les valeure aleatoires sont\n");
for(i=0;i<v;i++)
{
z=rand()*100;
while((z>=10000)||(z<1))
{
z=rand()*100;
}
b=z;
printf("%d ",b);
if(x*100>=b)
t2[i]=t[i];
else
{
if(t[i]==0)
t2[i]=1;
else
t2[i]=0;
}
}
printf("\n le message apres la modification :\n");
for(i=0;i<v;i++)
{
printf("%d",t2[i]);
}
}
void decod()
{
int p,j,ss,i,f,k;
printf("\n*****decodage du message binaire*****\n");
p=j=ss=i=f=0;
k=7;
while(i<v)
{
for(j=p;j<p+7;j++)
{
ss+=t2[j]*pow(2,k-1-f);
f++;
}
printf("%c",ss);
p+=7;
i=p;
ss=f=0;
}
printf("\n");
}
void main()
{
double x;
char s[100];
printf("entrer une chaine de caractere ");
gets(s);
printf("string est %d\n",strlen(s));
codebinaire(s);
printf("\n entrer la probabilite que le message arrive correcte \n");//le probabilite enterer sera arrondi si elle de valeure relle
scanf("%lf",&x);
prob(x);
decod();
}
voici une parti de mon projet(reseau)cette parti vous montre la conversion en binaire d'une chaine de carctere et réciproquement a propos de la probabilite tu peut l'enlever (pour mon code met la probabilite a 99)
Donc tu doit réctifier le code en enlevant la probabilite et tu met le codage sur 8 bit
bon chance.
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<math.h>
int t[100],v=0,t2[100];
void codebinaire(char s[])
{
int i,a,t1[100],t2[100],j=0,k=0,temp,p=0,w=0,b,ss,f;
double x,z;
char chr,message;
for(i=0;i<strlen(s);i++)
{
a=s[i];//affectation cert a determiner le code ascii afin du calculer le code binaire
printf("le code ASCII de %c est %d \n",s[i],a);
while(a>0)//determination du code binaire
{
t1[j]=a%2;
a/=2;
j++;
}
for(p=j-1;p>j/2;p--)//invertion du tableau pour obtenir le code binaire correcte
{
temp=t1[p];
t1[p]=t1[k];
t1[k]=temp;
k++;
}
k=0;
for(j=v;j<v+7;j++)//stockage du code binire d'un caractere dans le tableau globale
{
t[j]=t1[w];
w++;
}
w=0;
j=0;
v+=7;
}
printf("\n le code binaire de votre message est \n");
for(i=0;i<v;i++)
{
printf("%d",t[i]);
}
}
void prob(double x)
{
int i,b;
double z;
printf("\n votre probabilite est %.2lf %%\n",x);
printf("\n votre nouvelle probabilite est %.0lf\n ",x*100);
printf("les valeure aleatoires sont\n");
for(i=0;i<v;i++)
{
z=rand()*100;
while((z>=10000)||(z<1))
{
z=rand()*100;
}
b=z;
printf("%d ",b);
if(x*100>=b)
t2[i]=t[i];
else
{
if(t[i]==0)
t2[i]=1;
else
t2[i]=0;
}
}
printf("\n le message apres la modification :\n");
for(i=0;i<v;i++)
{
printf("%d",t2[i]);
}
}
void decod()
{
int p,j,ss,i,f,k;
printf("\n*****decodage du message binaire*****\n");
p=j=ss=i=f=0;
k=7;
while(i<v)
{
for(j=p;j<p+7;j++)
{
ss+=t2[j]*pow(2,k-1-f);
f++;
}
printf("%c",ss);
p+=7;
i=p;
ss=f=0;
}
printf("\n");
}
void main()
{
double x;
char s[100];
printf("entrer une chaine de caractere ");
gets(s);
printf("string est %d\n",strlen(s));
codebinaire(s);
printf("\n entrer la probabilite que le message arrive correcte \n");//le probabilite enterer sera arrondi si elle de valeure relle
scanf("%lf",&x);
prob(x);
decod();
}
pique
Messages postés
7
Date d'inscription
lundi 1 octobre 2001
Statut
Membre
Dernière intervention
1 novembre 2001
4 oct. 2001 à 14:19
4 oct. 2001 à 14:19
J'ai un autre problème pour convertir 256(16) en nombre décimale ma réponse est 00(16)??????
de plus mettre le nombre binaire 1010110000 en base décimale
(1*2^9)+.....(0*2^0)=672(16)?????
Est ce j'ai compris ou pas. Pouvez vous faire le détail de la solution pour que je puisse comprendre.
Merci
Danielle
de plus mettre le nombre binaire 1010110000 en base décimale
(1*2^9)+.....(0*2^0)=672(16)?????
Est ce j'ai compris ou pas. Pouvez vous faire le détail de la solution pour que je puisse comprendre.
Merci
Danielle
slt jaurai une question :estce que l'on peut peut ecrire un mot en binaire
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
25 févr. 2006 à 12:18
25 févr. 2006 à 12:18
Salut,
Par exemple prenons le mots rom1.
On peut convertir chaque caractère dans son code ASCII
A = 65
B = 66
http://www.commentcamarche.net/base/ascii.php3
Ensuite on converti en binaire. Et voilà.
Comme je suis un peu paresseux pour faire ça à la main j'ai fait un petit script et voilà ton résultat pour le mot rom1.
Créer et exécuter sous Fedora 4
Et le résultat
Par exemple prenons le mots rom1.
On peut convertir chaque caractère dans son code ASCII
A = 65
B = 66
http://www.commentcamarche.net/base/ascii.php3
Ensuite on converti en binaire. Et voilà.
Comme je suis un peu paresseux pour faire ça à la main j'ai fait un petit script et voilà ton résultat pour le mot rom1.
Créer et exécuter sous Fedora 4
#! /usr/bin/perl use warnings; use strict; #Description: conversion binaire/décimal & décimal/binaire # décimal en binaire sub dec2bin { return unpack ("B32", pack("N",shift)); } # binaire en décimal sub bin2dec { return unpack("N", pack("B32",shift)); } # rom1 en binaire # obtenir le code ASCII des caractères # ensuite conversion en binaire my $nom_bin = join " ", map { dec2bin($_) } unpack("C*","rom1"); print "Le mots rom1 en binaire\n$nom_bin\n"; #reconversion en caractère my $nom = join "",map { chr(bin2dec($_)) } split " ",$nom_bin; print "Reconversion de mot rom1 de binaire vers affichage normal : $nom\n";
Et le résultat
[lamitest@localhost my_perl_script]$ perl dec2bin2dec.pl Le mots rom1 en binaire 00000000000000000000000001110010 00000000000000000000000001101111 00000000000000000000000001101101 00000000000000000000000000110001 Reconversion de mot rom1 de binaire vers affichage normal : rom1 [lamitest@localhost my_perl_script]$
SeGi01
Messages postés
403
Date d'inscription
dimanche 8 juillet 2001
Statut
Membre
Dernière intervention
28 février 2010
149
2 oct. 2001 à 22:03
2 oct. 2001 à 22:03
191= 16*11+? (tu trouves 11 en divisant 191 par 16 et ? en enlevant DE 191 le résultat de 16*11 (=176) donc 191-176=15)
d'où
191=16*11+15 en hexadécimal 11 s'écrit B et 15 F si bien que ton 191(10) devient BF(16)
chiffres hexa : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (tu peux compter, il y en a 16)
d'où
191=16*11+15 en hexadécimal 11 s'écrit B et 15 F si bien que ton 191(10) devient BF(16)
chiffres hexa : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (tu peux compter, il y en a 16)