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

cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 6 avril 2005 à 12:23 - Dernière réponse : sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention
- 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 

7 réponses

Répondre au sujet
sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention - 8 avril 2005 à 12:18
+3
Utile
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 :)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sebseb42
sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention - 7 avril 2005 à 18:58
0
Utile
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
cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 8 avril 2005 à 08:32
0
Utile
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
cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 11 avril 2005 à 08:54
0
Utile
ok, c compris, merci.

David, à VERSAILLES
Commenter la réponse de cs_nitrique
cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 11 avril 2005 à 13:30
0
Utile
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
cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 11 avril 2005 à 13:40
0
Utile
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
sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention - 11 avril 2005 à 20:08
0
Utile
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.