int ptr maskieren
-
Hallo,
steh grad vor einem kleinern problem, bei dem ich nicht weiterkomme.
ich hab einen int ptr, der auf eine zahlenreihe zeigt (z.B. 136451243); die länge dieses int-ptrs hab ich auch.
Jetzt möchte ich diesen Pointer maskieren (bitweise) mit einem mit einem int ptr Maske (z.B. 10101011). An allen Stellen, an denen sich in der Maske eine 1 befindet sollen übrigbleiben und anschließend mit einem anderen int Array[] verglichen werden.
im Prinzip in etwa so:
if((IntPtr & ptrMaske) == ptrArray)
mfg
martin
-
martin_kaulich schrieb:
ich hab einen int ptr, der auf eine zahlenreihe zeigt (z.B. 136451243);
ist das ein nullterminierter string oder ein int-wert?
martin_kaulich schrieb:
Jetzt möchte ich diesen Pointer maskieren (bitweise) mit einem mit einem int ptr Maske (z.B. 10101011).
den pointer selber, oder das worauf er zeigt?
martin_kaulich schrieb:
An allen Stellen, an denen sich in der Maske eine 1 befindet sollen übrigbleiben und anschließend mit einem anderen int Array[] verglichen werden.
im Prinzip in etwa so:if((IntPtr & ptrMaske) == ptrArray)
ja, so geht's etwa. beschreib mal genauer was du willst.
-
es handelt sich um einen int-wert / keinen null-terminiernten string.
den pointer selber, oder das worauf er zeigt?
auf das was er zeigt, soll die Maske angewandt werden.
beschreib mal genauer was du willst
unsigned short Fkt (unsigned int *ptr, unsigned short length_ptr, unsigned int *mask, unsigned short mask_length, unsigned int Array[32]) { }
so sieht die funktion aus: ptr stellt den ptr auf den IntWert dar, auf den die Maske mask angewandt werden soll.
Die Länge vom ptr ist >= die länge vom Array[32]. Im Array selbst befinden sich ebenfalls lauter int-Wert (z.B. 1235463)
Wenn die Maske kürzer ist als das Array[32] dann wird die Maske mit 1er aufgefüllt. Die Maske besteht aus 1 und 0 - z.B. 10010111 (nicht terminiert)
-> ptr soll mit Array verglichen werden, kann sich aber in den Werten, in denen die Maske ungleich 1 ist (nämlich 0) unterscheiden.
mfg
martin
-
hallo,
wenn ich dich richtig verstanden habe, brauchst du etwas in dieser Art:[code]
void BitMask (unsigned int *ptr, unsigned short length_ptr, unsigned int *mask, unsigned short mask_length, unsigned int *Array) { for ( unsigned int i = 0; i < length_ptr; i++ ) { if ( i < mask_length ) { if ( Array[i] == ( ptr[i] & mask[i] )) { //identisch } } else { if ( Array[i] == ( ptr[i] )) { //identisch } } } }
[code]
hoffentlich brings was
servus