c++ manipulation bit
Le
paolo_3

voici un prog mai sme fais erreur a cause du void voudrais decaler
donc bit mais sans les perdre
exemple: 00101111
en : 10111100
voici le prog:
#include <fstream>
int main()
{
using std::ifstream;
using std::ofstream;
ifstream ifs("c:\temp/plo.jpg", std::ios::binary);
ofstream ofs("c:\temp/plo.gio",std::ios::binary);
//
// on lit et on écrit un octet à la fois, mais c'est très rapide
car les flux standard
// en entrée et en sortie procèdent à des accès optimisés au m=
édia
sous-jacent (accès
// en bloc et une antémémoire pour les données disponibles).
//
char c;
int n;
n=2;
while (ifs.get(c)) {
void shift_left(unsigned char *c,
unsigned int n) {
n=n%CHAR_BIT; /* make sure that n<CHAR_BIT */
unsigned char tmp=(*c)>>(CHAR_BIT-n);
*c=((*c)<<n)|tmp;
}
ofs.put(c);
} }
erreur de compilation :
C:Program FilesCodeBlocksMinGWessai3main.cpp||In function 'int
main()':|
C:Program FilesCodeBlocksMinGWessai3main.cpp|21|error: a function-
definition is not allowed here before '{' token|
|| Build finished: 1 errors, 0 warnings |
merci
donc bit mais sans les perdre
exemple: 00101111
en : 10111100
voici le prog:
#include <fstream>
int main()
{
using std::ifstream;
using std::ofstream;
ifstream ifs("c:\temp/plo.jpg", std::ios::binary);
ofstream ofs("c:\temp/plo.gio",std::ios::binary);
//
// on lit et on écrit un octet à la fois, mais c'est très rapide
car les flux standard
// en entrée et en sortie procèdent à des accès optimisés au m=
édia
sous-jacent (accès
// en bloc et une antémémoire pour les données disponibles).
//
char c;
int n;
n=2;
while (ifs.get(c)) {
void shift_left(unsigned char *c,
unsigned int n) {
n=n%CHAR_BIT; /* make sure that n<CHAR_BIT */
unsigned char tmp=(*c)>>(CHAR_BIT-n);
*c=((*c)<<n)|tmp;
}
ofs.put(c);
} }
erreur de compilation :
C:Program FilesCodeBlocksMinGWessai3main.cpp||In function 'int
main()':|
C:Program FilesCodeBlocksMinGWessai3main.cpp|21|error: a function-
definition is not allowed here before '{' token|
|| Build finished: 1 errors, 0 warnings |
merci
Bonjour,
qu'est-ce qui n'est pas clair dans ce message ? Le compilateur dit
qu'il est en train de lire la définition de la fonction main et qu'il
est interdit de définir une autre fonction ici (i.e. à l'intérieur de
main), donc peut-être faudrait-il la définir ailleurs ?
En C et C++ on ne peut pas définir de fonction à l'intérieur d'une autre
fonction, même si c'est le "main".
si j'elimine le main me fera d'autre erreur ..alors comment faire ou
une autre solution qui arrive au meme resultat?
merci
Faudrait expliquer un peu mieux ton probleme.
Ca ressemble a des fragments de code C++ mis ensemble par quelqu'un qui
n'y comprend vraiment rien.
Pourquoi C++ ? Est-ce que c'est plus qu'un exercice de cours
que tu essaies de faire faire par les membres de ce newsgroup ?
D'un cote il y a des constructions un peu complexes. De l'autre, des
concepts aussi basiques que la notion de fonction n'ont pas l'air maitrisees
du tout. Si tu tiens vraiment a le faire en C++, ben je pense qu'il va falloir
apprendre un peu de C++...
Il faut juste "sortir" la fonction shift_left du main et l'appeler dans
la boucle while.
Attention, je n'ai pas vérifié le programme, j'ai juste déplacé la
fonction shift_left et mis l'appel dans la boucle.
Comme ceci :
#include <fstream>
void shift_left(unsigned char *c, unsigned int n)
{
n=n%CHAR_BIT; /* make sure that n<CHAR_BIT */
unsigned char tmp=(*c)>>(CHAR_BIT-n);
*c=((*c)<<n)|tmp;
}
int main()
{
using std::ifstream;
using std::ofstream;
ifstream ifs("c:\temp/plo.jpg", std::ios::binary);
ofstream ofs("c:\temp/plo.gio",std::ios::binary);
//
// on lit et on crit un octet la fois, mais c'est tr s rapide
car les flux standard
// en entr e et en sortie proc dent des acc s optimis s au m dia
sous-jacent (acc s
// en bloc et une ant m moire pour les donn es disponibles).
//
char c;
int n;
n=2;
while (ifs.get(c))
{
shift_left(c, n);
}
ofs.put(c);
}
salut merci essayer mais me fais erreur
C:Program FilesCodeBlocksMinGWessai3main.cpp||In function 'int
main()':|
C:Program FilesCodeBlocksMinGWessai3main.cpp|33|error: invalid
conversion from 'char' to 'unsigned char*'|
C:Program FilesCodeBlocksMinGWessai3main.cpp|33|error:
initializing argument 1 of 'void shift_left(unsigned char*, unsigned
int)'|
||=== Build finished: 2 errors, 0 warnings ===|
malheuresement dans le void l erreur est la je connais pas voici le
prg.
#include <fstream>
#include #include #include <iostream>
char c;
int n;
void shift_left(unsigned char *c, unsigned int n)
{
n=n%CHAR_BIT; /* make sure that n<CHAR_BIT */
unsigned char tmp=(*c)>>(CHAR_BIT-n);
*c=((*c)<<n)|tmp;
}
int main()
{
using std::ifstream;
using std::ofstream;
ifstream ifs("c:\temp/plo.jpg", std::ios::binary);
ofstream ofs("c:\temp/plo.gio",std::ios::binary);
//
// on lit et on écrit un octet à la fois, mais c'est très rapide
car les flux standard
// en entrée et en sortie procèdent à des accès optimisés au m édia
sous-jacent (accès
// en bloc et une antémémoire pour les données disponibles).
//
while (ifs.get(c)) {
{
shift_left(c, n);
}
ofs.put(c);
} }
à chaque fois que tu as un message d'erreur, il va se passer quelques mois
avant que ton programme compile :-)
Le 16 octobre 2011, paolo_3 a écrit :
« Dans la fonction main()... »
« ... ligne 33, conversion invalide de "char" vers "unsigned char*"... »
« ... lors de l'initialisation de l'argument nº 1 de la fonction
shift_left. »
Ligne 33 c'est celle-là :
À la lumière des messages d'erreur, essaye de comprendre par toi-même...
(Indice : quel est le type de "c" ?)
--
LL
je comprend mais je vois pas c c'est un char ...donc je vois pas
cequ'il veu de plus
j'ai essaie de le retirer comme je penser
unsigned char *b
fesais comme si je le declarer charmais me dit que mmanque le char..
c'est vrai je suis debutant jessaie de comprendre mais je trouve pas
ce que je recherche sinon je viendrais pas ici est ecrie
maisprobleme ..enfin je copie est je colle quand ca m'arrange mais je
modifie aussi ,j'essaie de faire quelque chose ...mais je de la peine
c'est vrai !
voila je devais declarer
unsigned char *c
est la il compile ok pas d'erreur
À mon avis, tu n'y arriveras jamais comme ça. Il faut que tu te trouves un
livre (ou un cours en ligne) d'apprentissage du C++.
Qu'il compile est une chose, que l'exécutable obtenu fonctionne
correctement (et conformément à ce qu'on souhaite) en est une autre...
--
LL