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
A voir également:

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 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
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 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
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 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
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
Rejoignez-nous