Prototype
E_RTN EMemory::BytesSubstitute( ulonglong *pullByteCountSubstitued,
uchar ucByteToPut,
void *pBytesToFind,
ulonglong ullBytesToFindSize,
ulonglong ullOffset = 0,
ulonglong ullOffsetSize = EMemory::SizeUpToEnd );

Cette fonction substitue chaque octet ayant l'une des valeurs de la série d'octets pBytesToFind de l'intervalle de travail par l'octet ucByteToPut.

 

Argument

ulonglong *pullByteCountSubstitued

adresse d'une variable de type ulonglong où y sera copié le nombre d'octets substituté.

Si cette information ne vous intéresse pas cet argument peut être NULL (la fonction ne retournera pas d'erreur à ce propos).

uchar ucByteToPut

octet de substitution (valeur qui va remplacer) .

void *pBytesToFind

adresse de la série d'octets à substituer (valeurs qui doivent être remplacées).

ulonglong ullBytesToFindSize

taille de la série d'octets à substituer.

ulonglong ullOffset = 0

offset de départ de l'intervalle de travail de substitution.

ulonglong ullOffsetSize = EMemory::SizeUpToEnd

étendue de l'intervalle de travail de substitution.

 

Retour

E_RTN

voir la section retour de la librairie Eclat.

 

Exemple

Description :

Substitution des octets 0x42 ou 0x41 ("BA" en ASCII) par l'octet 0x59 ('Y' en ASCII) et des octets 0x45 ou 0x44 ou 0x43 ("EDC" en ASCII) par l'octet 0x5A ('Z' en ASCII) sur la totalité de l'espace de travail d'un objet EMemory contenant les données 0x41, 0x42, 0x41, 0x43, 0x41, 0x44, 0x41, 0x45 et 0x41 ("ABACADAEA" en ASCII).

Code :

EMemory eMem( "ABACADAEA", 9 ); // objet EMemory alloué de 9 octets
ulonglong ullCount;

eMem.TraceEx( _T("eMem") );
eMem.BytesSubstitute( &ullCount, 'Y', "BA", 2 );
ETrace::DoEx( _T("Nombre d'octets ayant la valeur 0x42 ou 0x41 remplacé par la valeur 0x59 = %I64u.\n\n"), ullCount );
eMem.TraceEx( _T("eMem") );
eMem.BytesSubstitute( &ullCount, 'Z', "EDC", 3 );
ETrace::DoEx( _T("Nombre d'octets ayant la valeur 0x45 ou 0x44 ou 0x43 remplacé par la valeur 0x5A = %I64u.\n\n"), ullCount );
eMem.TraceEx( _T("eMem") );

Sortie :

### Object EMemory 'eMem' Trace #
# Object address='0x0012F458', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x0034B650', workspace size='9' byte(s).
# Array data from offset '0x00000000' to offset '0x00000008', length=9 byte(s).
# Offset start 0x00000000 41 42 41 43 41 44 41 45 41 .. .. .. .. .. .. .. [ABACADAEA]
### End #

Nombre d'octets ayant la valeur 0x42 ou 0x41 remplacé par la valeur 0x59 = 6.

### Object EMemory 'eMem' Trace #
# Object address='0x0012F458', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x0034B650', workspace size='9' byte(s).
# Array data from offset '0x00000000' to offset '0x00000008', length=9 byte(s).
# Offset start 0x00000000 59 59 59 43 59 44 59 45 59 .. .. .. .. .. .. .. [YYYCYDYEY]
### End #

Nombre d'octets ayant la valeur 0x45 ou 0x44 ou 0x43 remplacé par la valeur 0x5A = 3.

### Object EMemory 'eMem' Trace #
# Object address='0x0012F458', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x0034B650', workspace size='9' byte(s).
# Array data from offset '0x00000000' to offset '0x00000008', length=9 byte(s).
# Offset start 0x00000000 59 59 59 5A 59 5A 59 5A 59 .. .. .. .. .. .. .. [YYYZYZYZY]
### End #

Vue :

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02 03 04 05 06 07 08
  41
A
42
B
41
A
43
C
41
A
44
D
41
A
45
E
41
A

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02 03 04 05 06 07 08
  59
Y
59
Y
59
Y
43
C
59
Y
44
D
59
Y
45
E
59
Y

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02 03 04 05 06 07 08
  59
Y
59
Y
59
Y
5A
Z
59
Y
5A
Z
59
Y
5A
Z
59
Y

 

Voir aussi
E_RTN EMemory::ByteSubstitute( ulonglong *pullByteCountSubstitued, uchar ucByteToPut, uchar ucByteToFind, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );
E_RTN EMemory::BlockSubstitute( ulonglong *pullBlockCountSubstitued, void *pBlockToPut, ulonglong ullBlockToPutSize, void *pBlockToFind, ulonglong ullBlockToFindSize, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );
E_RTN EMemory::BlocksSubstitute( ulonglong *pullBlockCountSubstitued, void *pBlockToPut, ulonglong ullBlockToPutSize, EMemory::SC_BLOCK *pscBlockToFind, ulonglong ullBlockToFindCount, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );

 

Minimum
Version 1.0.0