Prb tableau de Byte !!! Help !!!

Messages postés
43
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
25 avril 2008
- - Dernière réponse : ctx_man
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013
- 29 janv. 2006 à 16:47
Bonjour,

J'ai un problème avec dans mon apprentissage du C++.



J'aimerai créée une méthode de classe capable de renvoyer un tableau d'octet
( à la manière d'un buffer de lecture ).



Je me tape la tête contre les murs tellement j'ai essayé de solutions.

J'y arrive très bien en Csharp.



Code Csharp :

function byte[] lectureBuffer(){

byte[] buffer = new byte[1024];

code....;

return buffer;

}



Voila, super simple en Csharp mais pas évidemment en C++ .



Si vous avez une solution ou même un exemple sur la lecture de buffer je suis
preneur.




Gluk
Afficher la suite 

8 réponses

Messages postés
127
Date d'inscription
mardi 23 août 2005
Statut
Membre
Dernière intervention
9 mai 2011
0
Merci
byte* lectureBuffer()
{
byte* buffer = new byte[1024];
// ton code
return buffer;
}
Commenter la réponse de dark_naruto25
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13
0
Merci
BYTE *pmem;
pmem = (BYTE*) VirtualAlloc(....);
return pmem;

je ne vois pas le problème, à part que je déconseille tant que faire se peut. Le prog appelant alloue sa mémoire, passe le pointeur à la fonction et est responsable de sa desalloc, ça occasionne moins de fuites mémoire.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
43
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
25 avril 2008
0
Merci
Merci dark_naruto25,

Mais j'ai 3 questions :

- Le code t'elle qu'il se presente, peut'il etre integré en méthode de classe ?

- byte est-il un dériver de char en C++ ?

- Peut tu me fournir un exemple de code appelant ?



J'illustre ma demande par du code Csharp :

MonObjetQuiLit oLecture = new MonObjetQuiLit (sPath);

While( oLecture.JePeuxLire ){

Byte[] oByte = oLecture.LireBuffer(); <- code appelant

}


Merci pour le code ci-dessus .


Gluk
Commenter la réponse de cs_gluk
Messages postés
43
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
25 avril 2008
0
Merci
Merci BruNews,

Mais je ne comprend pas le fonctionnement de VirtualAlloc



La ligne "pmem = (BYTE*) VirtualAlloc(....);" est pour moi un mystère .



Je suis conscient de demandé quelque chose de très simple, mais ça vas faire un
petit moment que je bloc sur ce problème .



Gluk
Commenter la réponse de cs_gluk
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13
0
Merci
Il ne faut jamais mettre devant soi de l'interprété et chercher à le refaire en C/C++ sinon tu produiras peut-être encore plus mauvais et lent.
Tu écris en bon gaulois le but à obtenir et ensuite transcription en code.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
0
Merci
VirtualAlloc est une fonction qui alloue de la mémoire (comme new, malloc, HeapAlloc, ....) sauf que c'est une fct de l'API windows.
un BYTE est un unsigned char et ne dérive pas d'un type (les types de bases ne sont pas des classes).

Je rejoint Brunews sur le fait que transcrire un code d'un language à un autre est pas conseillé. il vaut mieux partir de ce que doit faire le code
Commenter la réponse de ymca2003
Messages postés
43
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
25 avril 2008
0
Merci
Merci pour vos réponses.

Je suis d'accord, bien évidemment. On peut voir ce genre de confusion dans la
migration de gros projet.

J'ai illustré mes propos avec du code Csharp car c'est assez proche d’un pseudo
code (ou gaulois).

Si j'ai bien compris VirtualAlloc ne fonctionne QUE sous Windows est pas sous Linux
?

Si c'est le cas je vais essayer de faire autrement, car j'ai bien envie (une
fois mon programme fini) de le compiler sur Windows et Linux.

<!--[if !supportLineBreakNewLine]-->

<!--[endif]-->




Voici mon le code C++ :






Dans la méthode de classe







char * readFile(){




int
iSizeLastBloc = this->_lSizeFile - ((this->_lNumBloc - 1) *
this->_iSizeBuffer);




char
biteReadEnd[iSizeLastBloc];




//*-*-* a
verifier




*biteReadEnd
= this->_oBufferRead[(this->_iIndexNumBloc * this->_iSizeBuffer)];




this->_lNumBloc++;




this->_bState
= false;




return biteReadEnd;

}







dans l’appelant :







do{




char*
oBuffer;




oBuffer
=oCutter.readFile();




fwrite(oBuffer,
sizeof(oBuffer), 1, oFile);




}




while(oCutter.getState());







Voila mon vrais problème, c’est que je récupère une adresse
est pas le contenue du tableau.




Si vous avez une option ou même un exemple je suis preneur.






Gluk
Commenter la réponse de cs_gluk
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013
0
Merci
Salut !
oBuffer est un pointeur, donc une adresse. Mais tu peut l'utiliser en tableau. Si le tableau que tu a remplit contient "bonjour" oBuffer[0] contient 'b', oBuffer[1] contient 'o', ect...
Commenter la réponse de ctx_man