Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

c++ manipulation bit

18 réponses
Avatar
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 =E9crit un octet =E0 la fois, mais c'est tr=E8s rapide
car les flux standard
// en entr=E9e et en sortie proc=E8dent =E0 des acc=E8s optimis=E9s au m=
=E9dia
sous-jacent (acc=E8s
// en bloc et une ant=E9m=E9moire pour les donn=E9es disponibles).
//
char c;

int n;
n=3D2;

while (ifs.get(c)) {

void shift_left(unsigned char *c,
unsigned int n) {
n=3Dn%CHAR_BIT; /* make sure that n<CHAR_BIT */
unsigned char tmp=3D(*c)>>(CHAR_BIT-n);
*c=3D((*c)<<n)|tmp;
}

ofs.put(c);

} }

erreur de compilation :
C:\Program Files\CodeBlocks\MinGW\essai3\main.cpp||In function 'int
main()':|
C:\Program Files\CodeBlocks\MinGW\essai3\main.cpp|21|error: a function-
definition is not allowed here before '{' token|
||=3D=3D=3D Build finished: 1 errors, 0 warnings =3D=3D=3D|


merci

8 réponses

1 2
Avatar
paolo_3
On Oct 18, 10:49 am, Lucas Levrel wrote:
Le 17 octobre 2011, paolo_3 a écrit :

>> 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   !

À mon avis, tu n'y arriveras jamais comme ça. Il faut que tu te trouv es un
livre (ou un cours en ligne) d'apprentissage du C++.

> voila je devais declarer
> unsigned char *c
> est la il compile ok pas d'erreur

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



en effet compile sans erreur mais helas tu as raison plante me dis
erreur est s'arete, je comprend pas pourquoi si il compile devrais
functionner
Avatar
Olivier Miakinen
Le 18/10/2011 13:26, paolo_3 a écrit :

[...] je comprend pas pourquoi si il compile devrais
functionner



:-D
Avatar
Marc Boyer
Le 18-10-2011, paolo_3 a écrit :
en effet compile sans erreur mais helas tu as raison plante me dis
erreur est s'arete, je comprend pas pourquoi si il compile devrais
functionner



La compilation, c'est l'orthographe.
L'exécution, c'est le sens.

C'est pas parce que l'orthographe est correcte que ça veut dire
quelque chose, et même si ça signifie quelques chose, ce n'était
pas forcément ce que tu voulais.

En passant, si tu faisais un effort sur ton orthographe, ça
motiverait pour t'aider.

Marc Boyer
--
À mesure que les inégalités regressent, les attentes se renforcent.
François Dubet
Avatar
paolo_3
On Oct 18, 3:22 pm, Marc Boyer
wrote:
Le 18-10-2011, paolo_3 a écrit :

> en effet compile sans erreur  mais helas tu as raison plante me dis
> erreur est s'arete, je comprend pas pourquoi si il compile devrais
> functionner

  La compilation, c'est l'orthographe.
  L'exécution, c'est le sens.

  C'est pas parce que l'orthographe est correcte que ça veut dire
quelque chose, et même si ça signifie quelques chose, ce n'était
pas forcément ce que tu voulais.

  En passant, si tu faisais un effort sur ton orthographe, ça
motiverait pour t'aider.

Marc Boyer
--
À mesure que les inégalités regressent, les attentes se renforcent.
                                                        François Dubet



desoler pour l'orthographe ...
l'erreur viens de quoi ?
je n'ai pas compris pourquoi en met un * devant le c
Avatar
Pascal J. Bourguignon
paolo_3 writes:

On Oct 18, 3:22 pm, Marc Boyer
wrote:
Le 18-10-2011, paolo_3 a écrit :

> en effet compile sans erreur  mais helas tu as raison plante me dis
> erreur est s'arete, je comprend pas pourquoi si il compile devrais
> functionner

  La compilation, c'est l'orthographe.
  L'exécution, c'est le sens.

  C'est pas parce que l'orthographe est correcte que ça veut dire
quelque chose, et même si ça signifie quelques chose, ce n'était
pas forcément ce que tu voulais.

  En passant, si tu faisais un effort sur ton orthographe, ça
motiverait pour t'aider.

Marc Boyer
--
À mesure que les inégalités regressent, les attentes se renforcent.
                                                        François Dubet



desoler pour l'orthographe ...
l'erreur viens de quoi ?
je n'ai pas compris pourquoi en met un * devant le c



La compilation, ce n'est pas seulement l'orthographe, c'est la
grammaire. Si tu faisais un effort sur ta grammaire, ça motiverait
encore plus pour t'aider...

En C++ comme en français, il faut avoir une orthographe et une grammaire
correctes, si tu veux que le sens soit clair.

Ensuite, la question c'est que le sens que tu écris corresponde au sens
que tu veux exprimer, c'est à dire que la sémantique soit correcte, et
pour ça, il n'y a qu'une intelligence qui puisse le faire. Donc, pour
l'instant, un programmeur, car les intelligence artificielle ne sont pas
encore au point.


--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
Avatar
Marc Boyer
Le 18-10-2011, paolo_3 a écrit :
On Oct 18, 3:22 pm, Marc Boyer

desoler pour l'orthographe ...
l'erreur viens de quoi ?



L'erreur viens du fait que tu as une fonction qui attend
un type char* et que tu lui passais un char.

je n'ai pas compris pourquoi en met un * devant le c



Tu as quoi comme bases en C et/ou C++ ?
Ce que tu essayes de faire, c'est de passer un paramètre
modifiable à une fonction (ce qu'on appelle mode in/out en
algorithmique souvent, ou passage par référence).
En C, cela se fait en passant l'adresse du paramètre (mais
sais-tu ce qu'est un pointeur et une adresse ?).
En C++, on préfère passer une référence.

Petit code pour illustrer.

void raz1(int i){
i=0;
cout<<i<<endl;
}
void raz2(int* i){
*i=0;
cout<<*i<<endl;
}
void raz3(int& i){
i=0;
cout<<i<<endl;
}
int main(){
int x=1;
raz1(x);
cout<<x<<endl;
x=1;
raz2(&x);
cout<<x<<endl;
x=1;
raz3(x);
cout<<x<<endl;
}

--
À mesure que les inégalités regressent, les attentes se renforcent.
François Dubet
Avatar
Lucas Levrel
Le 18 octobre 2011, paolo_3 a écrit :

je n'ai pas compris pourquoi en met un * devant le c



Il faut te trouver un cours et l'étudier par toi-même.

La différence entre c et *b fait partie des rudiments.

--
LL
Avatar
paolo_3
On Oct 18, 5:16 pm, Marc Boyer
wrote:
Le 18-10-2011, paolo_3 a écrit :

> On Oct 18, 3:22 pm, Marc Boyer

> desoler pour l'orthographe ...
> l'erreur viens de quoi ?

  L'erreur viens du fait que tu as une fonction qui attend
un type char* et que tu lui passais un char.

> je n'ai pas compris pourquoi en met un *  devant le c

  Tu as quoi comme bases en C et/ou C++ ?
  Ce que tu essayes de faire, c'est de passer un paramètre
modifiable à une fonction (ce qu'on appelle mode in/out en
algorithmique souvent, ou passage par référence).
  En C, cela se fait en passant l'adresse du paramètre (mais
sais-tu ce qu'est un pointeur et une adresse ?).
  En C++, on préfère passer une référence.

  Petit code pour illustrer.

void raz1(int i){  
   i=0;
   cout<<i<<endl;}

void raz2(int* i){
  *i=0;
   cout<<*i<<endl;}

void raz3(int& i){
  i=0;
   cout<<i<<endl;}

int main(){
  int x=1;
  raz1(x);
  cout<<x<<endl;
  x=1;
  raz2(&x);
  cout<<x<<endl;
  x=1;
  raz3(x);
  cout<<x<<endl;

}

--
À mesure que les inégalités regressent, les attentes se renforcent.
                                                        François Dubet



salut je comprend pas bien ton code ...
le probleme que je vois
est que b n'a aucune valeur comme je charge
while (ifs.get(c))
c est en char
est ensuite la commande
shift_left(b, n);
b est vide pour c aplante je crois
mais j'ai vu char est de -127 a +127
est unsigned est 0 a 255
j'ai essayer de faire ceci
b=c;
mais bien sur erreur ..
donc je dois voir pour convertir la char en usigned ou
peu etre charger directement en en unsigned le fichier ?
1 2