binaire en c++

binaire en c++ - C++ - Programmation

Marsh Posté le 12-05-2004 à 16:58:04    

Salut à tous je voudrais simplement stocker du binaire. (Pas des caractère!) juste du binaire je ne connais pas la commande car en fait y faudrais que je code 11100000 qui équivaux à 224 en décimal mais qui n'a pas d'équivalent dans la norme ASCII.
Ce serais pour le placer dans un tableau. Comment dire au C++ qu'il "travaille" avec du binaire???
Merci  :bounce:

Reply

Marsh Posté le 12-05-2004 à 16:58:04   

Reply

Marsh Posté le 12-05-2004 à 16:59:22    

classe bitset de la STL
regarde dans n'importe quelle bonne doc, la MSDN si t'as rien

Reply

Marsh Posté le 12-05-2004 à 17:02:24    

ben en fait g chercher dans la msdn mais y'a 10 millions de références... T'as pas un ptit exemple plutot??? STP???

Reply

Marsh Posté le 12-05-2004 à 17:03:06    

std::vector<bool>
 
ou tout autre conteneur : vector et bitset ont un stockage optimisé

Reply

Marsh Posté le 12-05-2004 à 17:06:42    

oula!! ça m'a l'air chaud... Dsl mais g rien pigé (dsl d'etre lourd à comprendre...)je suis un ptit novice... Tu peux me donner un exemple stp???

Reply

Marsh Posté le 12-05-2004 à 17:10:52    

std::vector<bool> mes_cent_bits_à_zéro(100, False);
 
ou alros avec bitset (documente toi)
ou valarray<bool> (documente toi)

Reply

Marsh Posté le 12-05-2004 à 17:15:54    

ouais ok mais y'a pas un truc plus simple pour dire à Mr C++ que :
char [] = "11100000" est du binaire? Faire un tableau d'élément binaires???

Reply

Marsh Posté le 12-05-2004 à 17:21:39    

tu peux pas
 
à toi de faire une sequence de quelque chose que tu considères comme du binaire
 
genre
 
bool octet[8];
 
mais ça marche autant avec tout autre type entier

Reply

Marsh Posté le 12-05-2004 à 17:29:07    

c nul... Il aurait pu pensser a tous le monde le bjarne brosburg... Merci qd meme!

Reply

Marsh Posté le 12-05-2004 à 17:33:50    

mais tu racontes n'importe quoi ... on te dit que ça existe dans tous les sens, et que le binaire n'est qu'une vue de l'esprit. tout est binaire :  
 
int  i = 0340; -> ça fait exactement ce que tu demandes  
 
 
à toi d'apprendre un peu avant de critiquer


Message édité par Taz le 12-05-2004 à 17:35:16
Reply

Marsh Posté le 12-05-2004 à 17:33:50   

Reply

Marsh Posté le 12-05-2004 à 17:44:14    

Ca va t'énerve pas... Je voulais juste savoir si y'avait pas un truc plus simple...
Merci qd meme. @+


Message édité par damondef le 12-05-2004 à 17:44:33
Reply

Marsh Posté le 12-05-2004 à 17:47:21    

mais c'est enfantin, c'est toi qui abuses là ... personne au monde n'écris en base2 parce que c'est trop long. on utilise le décimal ou l'hexa/octal qui sont plus simple à manier. avec ça tu peux tout faire. après on ta indiquer comment manipuler une séquence de bits, bit par bit, parce qu'accéder au 3ème bit d'un entier c'est fastidieux

Reply

Marsh Posté le 12-05-2004 à 17:59:37    

Taz, dans tous les forum que j'ai lu où t'as participé, y'en a pas un ou tu t'enerves pas contre un pauvre newbie. C'est pas parce que t'as bcp d'expérience dans le C++ que tu peux insulter les autres, prétentieux va.
 
damondef : http://msdn.microsoft.com/library/ [...] _class.asp
 
j'ai trouvé pour ton truc de chaîne en binaire :
bitset::to_string
 
mais ça marche que dans un sens.
 

Code :
  1. // ch : 32 caractères max ici, que des '0' ou '1'
  2. unsigned long stringToBinary(const char ch[])
  3. {
  4.    unsigned long temp = 0L;
  5.    while (*ch)
  6.    {
  7.        temp << 1;
  8.        if (*ch++ == '1') temp++;
  9.    }
  10.    return temp;
  11. }


 
voilà pour convertir un char*/char[] (chaîne type C) en entier 32-bits. Ca ne fait aucune vérif attention.


Message édité par jesus_christ le 12-05-2004 à 18:08:10
Reply

Marsh Posté le 12-05-2004 à 18:14:20    

encore une fois, je ne vois aucun intéret d'écrire le binaire en base 2. apprends l'hexadécimal ou l'octal

Reply

Marsh Posté le 12-05-2004 à 18:17:17    

Taz a écrit :

encore une fois, je ne vois aucun intéret d'écrire le binaire en base 2. apprends l'hexadécimal ou l'octal

et s'il y avait un intérêt que tu ne connaissais pas ?
 
ce truc j'ai déjà eu à le faire pour... un exo à la FAC. Le prof voulait une preuve que l'on avait compris le binaire (c'était en DEUG je crois...) et on devait coder un truc de conversion.
 
J'ai bien du le faire, ça m'a pris 5mn mais je l'ai fait. Si j'avais dit au prof "votre truc ça sert à rien, le binaire c'est une vision de l'esprit" je crois pas que j'aurais eu une bonne note. :D

Reply

Marsh Posté le 12-05-2004 à 18:18:35    

jesus_christ a écrit :


 prétentieux va.


 
Je trouve cette remarque particulièrement déplacée par quelqu'un dont la citation associée est " votre nouveau dieu" :o

Reply

Marsh Posté le 12-05-2004 à 18:19:05    

mais ça c'était simplement pour vous faire jouer avec les opérateurs bit à bit.

Reply

Marsh Posté le 12-05-2004 à 18:24:08    

kadreg a écrit :

Je trouve cette remarque particulièrement déplacée par quelqu'un dont la citation associée est " votre nouveau dieu" :o

tu marques un point là :jap:
m'enfin un peu de gentillesse ne fais pas de mal, les réponses universelles du genre "ça sert à rien" ou "y'a mieux de toute façon" ça n'aide pas bcp.
 
Si tu trouves qu'il y a trop de newbies ici, va sur un forum plus "avancé" tu trouveras des questions à ta mesure :hello:

Reply

Marsh Posté le 12-05-2004 à 18:53:26    

y a pas trop de newbyes, y a trop de newbyes qui veulent tou tprémachés c'est pas pareil

Reply

Marsh Posté le 12-05-2004 à 20:18:47    

Je n'ai qu'une chose à dire :
 
56697665206c61206e6f746174696f6e2068657861646563696d616c2121 :)


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 12-05-2004 à 20:51:51    

va t'en écrire ça en binaire ...
154047157143164141154040143141151040142151145156040141165163163151

Reply

Marsh Posté le 12-05-2004 à 21:01:06    

216c6f6c21


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 13-05-2004 à 01:25:17    

C'est pas un problème de C++ mais de processeur : Intel ne permet pas de manipuler plus bas que l'octet.
Pour une comparaison de bitset et vector<bool> :
http://www.codeguru.com/Cpp/Cpp/cp [...] hread=8520
http://cpptips.hyperformix.com/cpp [...] v_vec_bool
Exemples bien expliqués :
http://www.codeguru.com/cpp/tic/tic0230.shtml

Reply

Marsh Posté le 13-05-2004 à 01:30:16    

non, même pas. en C et C++, la plus petite unité adressable est le 'char' qui doit faire au moins 8bits.
voir la doc de SGI pour l'interface de std::vector<bool> et std::bitset. si on a de la place ou si les défaillances de bitsets et vector<bool> sont problématique, l'utilisation de sequence<bool> est tout aussi conseillée

Reply

Marsh Posté le 13-05-2004 à 01:35:49    

Quoi "même pas". Je ne crois pas avoir dit le contraire.
Je réagissait à sa remarque que c'était un défaut du C++ de ne pas avoir pensé à pouvoir manipuler des bits.

Reply

Marsh Posté le 13-05-2004 à 07:35:16    

jesus_christ a écrit :

Taz, dans tous les forum que j'ai lu où t'as participé, y'en a pas un ou tu t'enerves pas contre un pauvre newbie. C'est pas parce que t'as bcp d'expérience dans le C++ que tu peux insulter les autres, prétentieux va.
 
damondef : http://msdn.microsoft.com/library/ [...] _class.asp
 
j'ai trouvé pour ton truc de chaîne en binaire :
bitset::to_string
 
mais ça marche que dans un sens.
 

Code :
  1. // ch : 32 caractères max ici, que des '0' ou '1'
  2. unsigned long stringToBinary(const char ch[])
  3. {
  4.    unsigned long temp = 0L;
  5.    while (*ch)
  6.    {
  7.        temp << 1;
  8.        if (*ch++ == '1') temp++;
  9.    }
  10.    return temp;
  11. }


 
voilà pour convertir un char*/char[] (chaîne type C) en entier 32-bits. Ca ne fait aucune vérif attention.


 
damondef, si tu es encore la, explique clairement ton probleme car "je voudrais simplement stocker du binaire" ca ne veut rien dire, dans la mesure ou tout ce que tu stockes c'est en binaire a l'intérieur.
 
Donne un exemple clair : de quoi tu pars, qu'est-ce que tu voudrais obtenir...
 
Et pour jesus_christ : pourquoi se casser la tete pour stocker du binaire... en base 2!! T'as peur de manquer de mémoire?
Taz - faisant preuve d'une grande patience, vu les réponses du newbie - a montré quelque chose de beaucoup plus simple a manipuler, a savoir std::vect<bool> ou, si il faut un tableau, bool chaine[N];

Reply

Marsh Posté le 13-05-2004 à 08:26:53    

Salut @ tous! Je ne pensser pas que mon sujet foutrais tant le bordel. En fait le truc que je comprenais pas ct : pk le C++ pouvais accepter l'ASCII et pas le binaire.
Désolé d'être un mauvais newbie mais bon...
Mon problème est que je dois envoyer une trame qui est composé de plusieurs champ sur une liaison RS232. Par exemple un champ contient : 011111110 que je remplace par le caractère : ~ (si je ne me suis pas trompé!) mais la ou ça se complique c quand je dois envoyer 11100000. Je ne trouve pas d'équivalent en ASCII.
En tout k sachez que je ne voulais pas foutre le bordel.
Merci pour votre aide :-)

Reply

Marsh Posté le 13-05-2004 à 08:57:32    

Et au final je voudrais ranger la trame complète dans un tableau...

Reply

Marsh Posté le 13-05-2004 à 09:54:46    

Le processeur ne permet pas de manipuler des bits, mais au minimum des octets.
Du coup les langages n'ont pas cette possibilité, sauf quelques implémentations spécifiques de compilateurs C destinés à des processeurs disposant de ce mode d'adressage (micro-contrôleurs notamment).

Reply

Marsh Posté le 13-05-2004 à 10:08:45    

Et si tu dois envoyer 11100000 ben ce n'est pas un problème, envoie la version décimale, ou octale, ou hexadécimale, c'est pareil évidemment : 224, 0340, 0xE0

Reply

Marsh Posté le 13-05-2004 à 11:16:15    

HelloWorld a écrit :

Le processeur ne permet pas de manipuler des bits, mais au minimum des octets.

manqué. ton processeur il peut tout faire, mais pas tout adresser. et comme déjà dit, y a des bêtes ou la plus petite unité adressable c'est 16bits

Reply

Marsh Posté le 13-05-2004 à 11:44:14    

Taz a écrit :

manqué. ton processeur il peut tout faire, mais pas tout adresser


C'est contradictoire ca  :D  

Reply

Marsh Posté le 13-05-2004 à 14:00:46    

Sous entendu son processeur = Intel (j'ai précisé Intel plus haut).
Et comme l'a dit Ace17, ta phrase elle veut rien dire. Et puis j'arrête là, c'est chipoter pour pas grand chose.

Reply

Marsh Posté le 13-05-2004 à 16:33:32    

Et comment on fait pour ranger des valeurs hexa dans un tableau???


Message édité par damondef le 13-05-2004 à 16:33:45
Reply

Marsh Posté le 13-05-2004 à 17:00:58    

Non c bon en fait g trouvé merci les gars :-)

Reply

Marsh Posté le 13-05-2004 à 17:32:25    

Ace17 a écrit :

C'est contradictoire ca  :D


 
Je ne pense pas que cela est contradictoire.
 
Un coeur micro peut changer la valeur d'un seul bit dans un registre de 8/16/32..bits. Par contre, un micro ne peut en aucun cas addresser un seul bit en mémoire, il doit lire ou ecrire 8/16/32.. bits.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 13-05-2004 à 21:43:40    

Mais non, c'était pour rigoler que je disais ca... je jouais sur le sens du mot "faire". Car a priori, addresser, c'est faire.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed