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

Résolu
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 6 avril 2005 à 12:23
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre 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
A voir également:

7 réponses

sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
8 avril 2005 à 12:18
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 :)
3
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
7 avril 2005 à 18:58
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 ;)
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
8 avril 2005 à 08:32
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
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
11 avril 2005 à 08:54
ok, c compris, merci.

David, à VERSAILLES
0

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

Posez votre question
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
11 avril 2005 à 13:30
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
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
11 avril 2005 à 13:40
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
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
11 avril 2005 à 20:08
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);
0
Rejoignez-nous