Fonction identique à memset mais pour les DWORD

Résolu
cs_bouba
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
- 27 déc. 2006 à 14:51
cs_bouba
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
- 29 déc. 2006 à 16:21
Bonjour, j'ai besoin de réaliser une copie de plusieurs DWORD dans un buffer mémoire. En faire je cherche l'identique de la fonction memset mais pour des "doubles octets".


par exemple je veux faire:
memset(buffer, UneValeur, nombre);


mais au lieu de copier des octets je veux copier des DWORD.


Connaissez-vous la fonction pour faire ça ?


Merci.


Bouba

8 réponses

SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
27 déc. 2006 à 16:05
void lmemset (DWORD *buffer, DWORD val, int len)
{
    if(!buffer || len <= 0) return;

    len--;
    while(len >= 0)
    {
       buffer[len] = val;
       len--;
    }
}

C++ (@++)<!--
3
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
27 déc. 2006 à 16:12
ou (je suis pas sûr pour celui-la):


void lmemset (void *buffer, DWORD val, int len)
{
    DWORD *c = (DWORD*)buffer;
    if(!c || len <= 0) return;

    len--;
    while(len >= 0)
    {
       c[len] = val;
       len--;
    }
}

C++ (@++)<!--
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
27 déc. 2006 à 16:54
De count à 0 inclus tu feras count+1, DEPASSEMENT !!!

Ensuite faudrait aller voir la traduc du compilo mais sinon pas bon de refaire sut de code début de boucle pour ressauter si fini.

Mettre en INLINE, surtout pas d'appel func pour cela.
__inline void setDWORDS(DWORD *pdw, DWORD v, DWORD len)
{
  if(!len) return; // a enlever dans code perso quand on sait ne jamais passer 0.
  do {
    *pdw++ = v;
  } while(--len);
}

ciao...
BruNews, MVP VC++
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
27 déc. 2006 à 17:03
oups j'avais zappé le len-- au début...

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
27 déc. 2006 à 17:38
Voyon brunews, tu m'as assé grondé sur ce sujet pour que ça me rentre bien dans la tête ;). Pour ce qui est du double saut inutile, je n'y avait pas pensé. Je metterai la bonne méthode en pratique la prochaine fois.

C++ (@++)<!--
0
cs_bouba
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
28 déc. 2006 à 09:13
Ok, merci pour ces réponses.

Mais n'existe t'il pas une fonction déjà existante dans l'API Win32 qui fait ça ?



Merci.



Bouba
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
28 déc. 2006 à 19:44
Un appel API ou autre fonction pénaliserait grandement les perfs de ton prog.
memset est toujours mis inline par le compilo.

ciao...
BruNews, MVP VC++
0
cs_bouba
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
29 déc. 2006 à 16:21
Ok, j'ai pigé, c'est vrai, tu as tout à fait raison.


Merci beaucoup.


Bouba
0