Prototype
E_RTN EMemory::BlocksSubstitute( ulonglong *pullBlockCountSubstitued,
void *pBlockToPut,
ulonglong ullBlockToPutSize,
EMemory::SC_BLOCK *pscBlockToFind,
ulonglong ullBlockToFindSize,
ulonglong ullOffset = 0,
ulonglong ullOffsetSize = EMemory::SizeUpToEnd );

Cette fonction substitue chaque bloc d'octets ayant les mêmes données de l'un des blocs d'octets pscBlockToFind de l'intervalle de travail par le bloc d'octets pBlockToPut.

La taille de l'espace de travail est redimensionné à la hausse ou à la baisse si la taille du bloc d'octets à substituer est différente de la taille du bloc d'octets de substitution.

 

Argument

ulonglong *pullBlockCountSubstitued

adresse d'une variable de type ulonglong où y sera copié le nombre de blocs 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).

void *pBlockToPut

adresse du bloc d'octets de substitution (bloc qui va remplacer) .

ulonglong ullBlockToPutSize

taille du bloc d'octets de substitution.

EMemory::SC_BLOCK *pscBlockToFind

adresse de la structure de type EMemory::SC_BLOCK ou du tableau de structures de type EMemory::SC_BLOCK contenant les blocs d'octets à substituer.

ulonglong ullBlockToFindCount

nombre de structure de type EMemory::SC_BLOCK contenu dans le pointeur pscBlockToFind à 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 de tous les blocs d'octets ayant soit la valeur 0x0D, soit la valeur 0x0A, soit les valeur 0x0D et 0x0A, soit la valeur 0x00 dans un objet EMemory alloué de 27 octets d'espace de travail contenant les données 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x0D, 0x0A, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x0D, 0x4C, 0x4D, 0x4E, 0x4F, 0x0A, 0x50, 0x51, 0x52, 0x00, 0x53, 0x54, 0x0D et 0x0A ("ABCDEF\x0D\x0AGHIJK\x0DLMNO\x0APQR\x00ST\x0D\0x0A" en ASCII).

Code :

EMemory eMem( "ABCDEF\x0D\x0AGHIJK\x0DLMNO\x0APQR\x00ST\x0D\x0A", 27 ); // objet EMemory alloué de 27 octets
ulonglong ullCount;
EMemory::SC_BLOCK sctBlock[]={
  { "\x0D", 1, 0, 0, 0 },
  { "\x0A", 1, 0, 0, 0 },
  { "\x0D\x0A", 2, 0, 0, 0 },
  { "\x00", 1, 0, 0, 0 }
  };

eMem.TraceEx( _T("eMem") );

eMem.BlocksSubstitute( &ullCount, "xyz", 3, sctBlock, 4 );
ETrace::DoEx( _T("Nombre de bloc d'octets substitué = %I64u\n\n") , ullCount );

eMem.TraceEx( _T("eMem") );

Sortie :

### Object EMemory 'eMem' Trace #
# Object address='0x0012F458', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x0034FD48', workspace size='27' byte(s).
# Array data from offset '0x00000000' to offset '0x0000001A', length=27 byte(s).
# Offset start 0x00000000 41 42 43 44 45 46 0D 0A 47 48 49 4A 4B 0D 4C 4D [ABCDEF..GHIJK.LM]
# Offset start 0x00000010 4E 4F 0A 50 51 52 00 53 54 0D 0A .. .. .. .. .. [NO.PQR.ST..]
### End #

Nombre de bloc d'octets substitué = 5

### Object EMemory 'eMem' Trace #
# Object address='0x0012F458', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x0034FDA0', workspace size='35' byte(s).
# Array data from offset '0x00000000' to offset '0x00000022', length=35 byte(s).
# Offset start 0x00000000 41 42 43 44 45 46 78 79 7A 47 48 49 4A 4B 78 79 [ABCDEFxyzGHIJKxy]
# Offset start 0x00000010 7A 4C 4D 4E 4F 78 79 7A 50 51 52 78 79 7A 53 54 [zLMNOxyzPQRxyzST]
# Offset start 0x00000020 78 79 7A .. .. .. .. .. .. .. .. .. .. .. .. .. [xyz]
### End #

Vue :

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00 01 02 03 04 05 06 07 08 09 0A 0B
41
A
42
B
43
C
44
D
45
E
46
F
0D 0A 47
G
48
H
49
I
4A
J
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E ..
0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A
4B
K
0D 4C
L
4D
M
4E
N
4F
O
0A 50
P
51
Q
52
R
00 53
S
54
T
0D 0A

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00 01 02 03 04 05 06 07 08 09 0A 0B
41
A
42
B
43
C
44
D
45
E
46
F
78
x
79
y
7A
z
47
G
48
H
49
I
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B
4A
J
4B
K
78
x
79
y
7A
z
4C
L
4D
M
4E
N
4F
O
78
x
79
y
7A
z
50
P
51
Q
52
R
78
x
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E ..
1C 1D 1E 1F 20 21 22
79
y
7A
z
53
S
54
T
78
x
79
y
7A
z

 

Voir aussi
E_RTN EMemory::ByteSubstitute( ulonglong *pullByteCountSubstitued, uchar ucByteToPut, uchar ucByteToFind, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );
E_RTN EMemory::BytesSubstitute( ulonglong *pullByteCountSubstitued, uchar ucByteToPut, void *pBytesToFind, ulonglong ullBytesToFindSize, 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 );

 

Minimum
Version 1.0.0