memcmp (längenparam)
-
Kann auch ganz geschickt sein wenn man Strukuren auf Gleichheit überprüfen will. Da muss man beim Erstellen natürlich auf das Padding aufpassen.
-
Tim schrieb:
Kann auch ganz geschickt sein wenn man Strukuren auf Gleichheit überprüfen will. Da muss man beim Erstellen natürlich auf das Padding aufpassen.
-
Oh, ich hätte vielleicht noch erwähnen sollen, dass man beim Erstellen auf das Padding aufpassen muss
-
Also das mit der Überprüfung auf Gleichheit mag ja ganz lustig sein, aber die Funktionalität läßt sich doch in einem Fünfzeiler unterbringen.
Seltsam kommt mir halt die größer/kleiner- Aussage vor, da sie sich nur der konsekutiven Bytefolgen annimmt und logischerweise nichts über den typisierten Inhalt sagen kann.
Mich hat eigentlich dann immer die Stelle interessiert, an der sich die Blöcke unterscheiden (Telegrammauswertung) und genau das liefert memcmp nicht.Geht's euch nicht auch öfters so, daß man sich zuerst freut, weil was fertig in der Lib ist und man dann feststellen muß, daß man's so gar nicht brauchen kann?
Also dann doch wieder "Handgeschnitztes"
-
Mr.Rolleyes schrieb:
Oh, ich hätte vielleicht noch erwähnen sollen, dass man beim Erstellen auf das Padding aufpassen muss
hast du. betrachte den link als ergänzung. memcmp auf c-structs angewandt ist trotzdem übel und sollte man lieber lassen.
pointercrash() schrieb:
Also das mit der Überprüfung auf Gleichheit mag ja ganz lustig sein, aber die Funktionalität läßt sich doch in einem Fünfzeiler unterbringen.
library-funktionen wie memcmp etc. sind oft auf speed ausgelegte asm-codes. selbermachen wird meist langsamer sein.
-
struct-freak schrieb:
library-funktionen wie memcmp etc. sind oft auf speed ausgelegte asm-codes. selbermachen wird meist langsamer sein.
Richtig, aber wenn ich das nicht rauskriege, was ich brauche, hilft keine Speed der Welt :p .
In dem Fall wurde ein Token- Frame rumgeschubst und die Adresse des Streamers ergibt sich aus der Position im Buffer, die ich deswegen brauche. memcmp ist tatsächlich 20% schneller als mein Gebastel, aber nochmal - es hilft ja nix.
-
pointercrash() schrieb:
...
Seltsam kommt mir halt die größer/kleiner- Aussage vor, da sie sich nur der konsekutiven Bytefolgen annimmt und logischerweise nichts über den typisierten Inhalt sagen kann.
Mich hat eigentlich dann immer die Stelle interessiert, an der sich die Blöcke unterscheiden (Telegrammauswertung) und genau das liefert memcmp nicht.pointercrash, in mir kommt der Verdacht auf, dass Du nicht verstehst, wie
memcmp() (d.h. byteweises Vergleichen von Speicherbereichen!) arbeitet.
Padding-Wirrwar beim Verwenden einer konkreten Struktur, kann es nicht geben!
Stellen an denen sich Speicherinhalt unterscheidet, werden von memcmp() immer gefunden.MfG
-
willy schrieb:
pointercrash, in mir kommt der Verdacht auf, dass Du nicht verstehst, wie memcmp() (d.h. byteweises Vergleichen von Speicherbereichen!) arbeitet.
Und in mir kommt der Verdacht auf, daß Dir nicht klar ist, daß byteweises Vergleichen auf größer/kleiner bis zur totalen Sinnlosigkeit kontextbefreit ist.
willy schrieb:
Padding-Wirrwar beim Verwenden einer konkreten Struktur, kann es nicht geben!
Wenn das Moses sagt, wird er sein Volk nach Kanaan führen müssen. Ich hatte durch die Postings vorher ein paar lehrreiche Aha- Erlebnisse.
willy schrieb:
Stellen an denen sich Speicherinhalt unterscheidet, werden von memcmp() immer gefunden.
Bestreite ich nicht, aber es nützt mir so wenig wie der Beweis, daß ich ein zehn Zentimeter großes Loch durch meine Klotür bohren kann. Ich brauch's einfach nicht und memcmp genauso wenig.
-
pointercrash() schrieb:
Und in mir kommt der Verdacht auf, daß Dir nicht klar ist, daß byteweises Vergleichen auf größer/kleiner bis zur totalen Sinnlosigkeit kontextbefreit ist.
nimm mal mal zwei zahlen, 123456 und 123476. wenn du die ziffern von links nach rechts vergleichst, wirste bei der 5ten stelle (von links) einen unterschied feststellen. der grössenunterschied einer einzelnen ziffer entscheidet, ob die gesamte zahl grösser oder kleiner ist. egal wie die ziffern rechts davon aussehen. das selbe gilt auch manchmal für bytefolgen.
-
stellenwertsystem-freak schrieb:
nimm mal mal zwei zahlen, ... , ob die gesamte zahl grösser oder kleiner ist. ... das selbe gilt auch manchmal für bytefolgen.
Manchmal ... eben
Little oder big endian? Damit fängt's an und es wird sich weiter ergeben, daß sich für solche Sachen kontextbezogenes Parsing empfielt, memcmp() spart mir da gar nichts.
-
pointercrash() schrieb:
stellenwertsystem-freak schrieb:
nimm mal mal zwei zahlen, ... , ob die gesamte zahl grösser oder kleiner ist. ... das selbe gilt auch manchmal für bytefolgen.
Manchmal ... eben
Little oder big endian?naja, zum checken ob sich zwei arrays (keine structs und sowas) oder speicherbereiche gleichen, ist memcmp doch prima geeignet. und bei vorzeichenlosen ganzzahlen im big-endian format kann man sogar rausfinden, welche grösser ist (z.b. beim replay-counter von WPA der aus 16 bytes besteht). ich finde für so'ne kleine funktion kann memcmp ganz schön viel.