vinc1008881
Messages postés257Date d'inscriptiondimanche 22 août 2004StatutMembreDernière intervention29 septembre 2010
-
1 août 2005 à 14:35
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009
-
1 août 2005 à 17:50
Salu tlm, en ce moment je developpe un OS donc je fai joujou avec gcc pour reprogrammer la librairie C (stdio.h + string.h + stdlib.h + math.h + conio.h)
J'ai donc fait ceci (je sais c'est imparfait, si vs avez des remarques je prend !) et en fait j'ai rajouter quelques fonctionalité : (par exemple initialiser 300 octet en memoire avec un long = à 0x10203040 va donner 102030401020304010... en memoire enfin je voudrais )
- mem_start_add est l'adresse de départ du bloc de memoire
- new_mem contient les donées (par ex 0x10203040)
- type indique le type de new_mem (1 pour char, 2 pour short, 4 pour long ...)
- n indique le nombre d'octet a initialiser
void memset (void * mem_start_add, void *new_mem, unsigned char type, int n)
{
int np = 0;
char *cptr, *mcptr; /* fodrais se debarraser de ce sac à pointeur !*/
short *sptr, *msptr;
long *lptr, *mlptr;
double *dptr, *mdptr;
switch (type) /*si on veut initialiser avec un char ou un double ou un long ...*/
{
case 1: /* case char*/
cptr = (char*)new_mem;
mcptr = (char*)mem_start_add;
for (;(np<n);np++)
{
*mcptr=*cptr;
mcptr++;
}
break;
case 2: /* case short*/
n/=2;
sptr = (short*)new_mem;
msptr = (short*)mem_start_add;
for (;(np<n);np++)
{
*msptr=*sptr;
msptr++;
}
break;
case 4:/* case long */
n/=4;
lptr = (long*)new_mem;
mlptr = (long*)mem_start_add;
for (;(np<n);np++)
{
*mlptr=*lptr;
mlptr++;
}
break;
case 8:/* case double*/
n/=8;
dptr = (double*)new_mem;
mdptr = (double*)mem_start_add;
for (;(np<n);np++)
{
*mdptr=*dptr;
mdptr++;
}
break;
}
}
mais quand je fais sa :
char buffer [300];
long lo = 0x10203040
memset (buffer,&lo,4,200);
ma memoire ne contient pas 102030401020... mais 4030201040302010... bizarre !
Merci a tous ceux qui ont lu mon post et merci a lavance de vos reponses