[C#] Récuperer le code binaire d'un char [Résolu]

Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Dernière intervention
4 avril 2011
- 6 avril 2005 à 12:23 - Dernière réponse :
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Dernière intervention
9 novembre 2007
- 11 avril 2005 à 20:08
Bonjour,

J'ai un char et j'aimerais afficher son code binaire (d=01100100) dans une string.

Jai un truc comme ça:

Convert.ToString(Int32.Parse(val.Text),2)

Mais il n'accepte que du numérique, or, je ne veux pas transformer mon char en numérique (il est faussé car il fait partie de la table ASCII étendue que je n'arrive pas à récupérer)

Merci d'avance.

David, à VERSAILLES
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Dernière intervention
9 novembre 2007
- 8 avril 2005 à 12:18
3
Merci
ahh excuse moi :)
>> est l'operateur de decalage de bit, par exemple si tu as un entier k qui a la valeur 7, k 111 en binaire, si tu fait k k >> 1; cela signifie que k recoie la valeur de k decaler de 1 bit vers la droite, le bit de point le plus fort est remplacer par un 0 lors du decalage, ce qui veut dire que ton k vaut desormais 11 (3) et si tu le refait, ca decale encore et k vaut 1, et ansi de suite.

>>= est similaire a ce que tu connais du += pour l'operateur + :)
il decale la propre variable. k >>= 8 fait un decalage de 8 bits vers la droite

donc ce que je disais, tu test le bit de poid le plus faible, ensuite tu decale de 1, cela fait paser le deuxieme bit en premiere position, ainsi tu retest le bit de poid le plus faible, et ainsi de suite :)

Merci sebseb42 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de sebseb42
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Dernière intervention
9 novembre 2007
- 7 avril 2005 à 18:58
0
Merci
un char est tout simplement un petit int, un int est un entier codé sur
32 bits, un char est un entier codé sur 8 bits, c'est tout.



ce que tu peux faire, grossierement, c'est faire une boucle dans laquel tu test le bit de poid le plus faible, comme ceci :



if ((my_char & 1) == 1)

// 1

else

// 0



tu l'ajoute dans une chaine, et ensuite tu passe au bit suivant :



my_char >>= 1;



et tu recommence en testant le nouveau premier bit (qui est en fait le
deuxieme) et ainsi de suite, environ 8 fois pour un char ;)
Commenter la réponse de sebseb42
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Dernière intervention
4 avril 2011
- 8 avril 2005 à 08:32
0
Merci
Salut sebseb42,

Heu... Que signifie >>= ?

normalement c'est une redirection de flux....

Peux tu me donner un exemple pour passer au bit suivant, je n'ai pas completement saisi ta méthode, merci.

David, à VERSAILLES
Commenter la réponse de cs_nitrique
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Dernière intervention
4 avril 2011
- 11 avril 2005 à 08:54
0
Merci
ok, c compris, merci.

David, à VERSAILLES
Commenter la réponse de cs_nitrique
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Dernière intervention
4 avril 2011
- 11 avril 2005 à 13:30
0
Merci
Ton idée a du bon mais elle ne me renvoye pas les bonnes valeurs.
Je me suis surement trompé:


private
string getBinaire(
char myChar)
{

string ret ="";

char car = myChar;
// Pour faire >>= car myChar est en lecture seule
for(
int i=0;i<8;i++)
{

if ((car & 1)==1) ret+= "1";

else ret+= "0";
car >>= 1;
}

return ret;
}

De plus, un char est toujours codé sur 8 mais si je fais la même chose avec un int, comment savoir sa longueur pour le for ?

David, à VERSAILLES
Commenter la réponse de cs_nitrique
Messages postés
346
Date d'inscription
jeudi 1 mai 2003
Dernière intervention
4 avril 2011
- 11 avril 2005 à 13:40
0
Merci
Heu, j'ai un peu retapé la fonction (je l'aie prise à l'envers), la voici:


private
string getBinaire(
char myChar)
{

string ret ="";

char car = myChar;
// Pour faire >>= car myChar est en lecture seule
for(
int i=1;i<=8;i++)
{

if ((car & 1)==1)
ret = "1"+ret;

else
ret = "0"+ret;
car >>= 1;
}

return ret;
}

C bon mais il me manque le bit de parité (le premier)
Ex: code ASCII 134 = 00100000 au lieu de 10100000


de plus, j'aimerais vraiment savoir sur combien de caractères est codé ma variable.

David, à VERSAILLES
Commenter la réponse de cs_nitrique
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Dernière intervention
9 novembre 2007
- 11 avril 2005 à 20:08
0
Merci
le bit de pariter fait partie des 8 bits d'un char, que tu le veuille ou non, un char ou un uchar, ca ne change pas le fait que c'est coder sur 8 bit, mais apres peut-etre que le CLR fait un decalage de bit arithmrtique et non logique, faut se renseigner sur le sujet.

sinon pour ton histoire de taille de variable, dans le namespace System.Runtime.InteropServices il y a la classe Marshall qui contient une fonction statique SizeOf :)

using System.Runtime.InteropServices;

...

int size = Marshal.SizeOf(typeof(int));
ou
int size = Marshal.SizeOf(ma_var_type_int);
Commenter la réponse de sebseb42

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.