Variablen und Hex initialisierung

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Variablen und Hex initialisierung

    Hello Gemeinde,

    ich mir fällt zunehmend auf, das Variablen mit Hex-Code definiert wird. Für Object eigenschaften (Flags etc.) nun stellt sich für mich die Frage wozu ist das sinnvoll. Man findet sowas nicht nur bei Flags sonder auch bei Verschlüsselungsalgorithmen. Hier mal ein kleines Beispiel, ich mache das etwas sprach übergreifend, jedoch interessiert mich hier zunehmend der PHP part.

    Quellcode

    1. $var = 0x2;


    Was bedeutet das? Bzw, was kann man daraus schließen.

    Quellcode

    1. Length_Low &= 0xFFFFFFFF;


    Dieser Konstrukt trimmt einen String auf 32Bit da FF 1Byte ist.

    Dann habe ich einen kleinen Codeschnipsel, der zwar klar ist, jedoch verstehe ich den Sinn nicht so richtig.

    Quellcode

    1. public function __construct()
    2. {
    3. $args = func_get_args();
    4. for ($i=0, $n=count($args), $f=0x1; $i<$n; $i++, $f *= 0x2)
    5. $this->add($args[$i], $f);
    6. }


    Wann ist es sinnvoll, oder wann ist es sinnvoll variablen mit Hex-Code zu definieren. Warum macht man das bei Verschlüsselungs algorithmen?

    Auszug aus dem SHA1 Alogrithmus

    Quellcode

    1. H[0] = 0x67452301;
    2. H[1] = 0xEFCDAB89;
    3. H[2] = 0x98BADCFE;
    4. H[3] = 0x10325476;
    5. H[4] = 0xC3D2E1F0;


    Kann mich da jemand etwas erhellen, oder mir was zu lesen geben?

    Danke

    so long
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Aus deinem PHP Beispiel ergibt das für mich auch wenig Sinn.

    Ob ich das jetzt mit hex ...

    Quellcode

    1. public function __construct()
    2. {
    3. $args = func_get_args();
    4. for ($i=0, $n=count($args), $f=0x1; $i<$n; $i++, $f *= 0x2)
    5. $this->add($args[$i], $f);
    6. }


    ... oder mit dezimal ...

    Quellcode

    1. public function __construct()
    2. {
    3. $args = func_get_args();
    4. for ($i=0, $n=count($args), $f=1; $i<$n; $i++, $f *= 2)
    5. $this->add($args[$i], $f);
    6. }


    ... schreibe.
    Da kommt doch das selbe raus ?
    Vielleicht sieht es einfach nur cooler aus 8) ... oder es verbraucht weniger Speicher :S



    Die Frage gehört wohl mehr ins Allgemeine Forum.



    Aber wenn man bitweise Operationen nutzt, dann macht es auf jedenfall Sinn.

    z.B die Klassenstile eines Fensters von Windows.
    Diese sind als Konstanten gesetzt.

    Wenn du mehrere Stile nutzen möchtest, kann du diese mit einem bitweisen-OR verknüpfen.


    Quellcode

    1. #define CS_VREDRAW 0x0001
    2. #define CS_HREDRAW 0x0002


    Quellcode

    1. wndclass.style = CS_VREDRAW | CS_HREDRAW;


    Jetzt ist eine gute Frage, was im Hintergrund passiert, wenn diese beiden Bits gesetzt werden ?(


    Abgesehen davon, sind ja alle Konstanten als Bitflags irgendwo definiert.
    Sind es Cursor, Farben oder Buttons .. etc. ...

    Im PHP , HTML, CSS Bereich sind mit bislang Hexcodes nur bei Farben untergekommen.


    Das man bei Verschlüsseungen mit Hexcode arbeitet, hat meiner Meinung nach, dann wieder was mit den Bitweisen Operationen zu tun, da man damit auf einer "anderen Ebene" operieren kann, was man wiederum mit einer dezimalen operation nicht hinbekommen würde.
  • Ok, dann mal anders gefragt wozu sind Bitweisen Operationen gut? Was kann ich damit anstellen, was bringt mir das. Das mit den Flags, versthe ich zwar, sehe da aber wenig sinn.

    Quellcode

    1. #define CS_VREDRAW 0x0001


    und was sagt mir das übersetzt?

    und in PHP

    Quellcode

    1. $var = 0x2;


    ergibt für mich auch kein sinn, weil ich einfach nicht weiß wozu das gut sein soll (außer das es echt verdammt cool und exstrem wichtig aussieht) und was ich davon habe. Ich finde darüber auch nicht wikrlich was im Internet, bzw ich weiß nicht wonach ich suchen soll. Sinn würde sowas für mich ergeben, wenn ich mit solchen fachsen eine bestimmt stelle im Speicher blocken könnte, aber das klingt etwas unrealistisch :) von daher denke ich mal das dass falsch ist. Ich werde eventuell mal noch ein anderes Forum konsultieren, also nicht aufregen wegen doppel post :)
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Es ist tatsächlich egal, ob man etwas hexadezimal angibt oder nicht, die Variable braucht dadurch auch nicht weniger Platz oder so. Die hexadezimalschreibweise ist eigentlich auch nur eine abkürzende Schreibweise für die Binärdarstellung. Die meisten können mit einer Hexziffer sofort die dazugehörige Binärzahl assozieren. Eine Ziffer steht immer für ein halbes Byte (Nibble) also vier Binärstellen. Wenn man nun bitweise operieren muss (was bei maschinennahem Programmieren leider sehr oft vorkommt), schreibt man die Zahl in ihrer Hexnotation, da man so jeder Variablen ansieht wo 0 und wo 1 sind. Damit es ist einfach Bitmasken zu definieren, da man es im Kopf machen muss, das umrechnen ins 10er-System ist viel komplizierter und geht im Kopf nicht so schnell.

    Bei PHP-Prgrammierung habe ich persönlich noch nie Hexzahlen benutzt und kann mir auch nichts vorstellen, da mit Resourcen in der Regel wenig gegeizt wird und die Sprache sehr weit entfernt von der Hardware ist. Das einige was ich mir vorstellen kann ist, Code der entweder portiert wurde oder bitfummelei im Rahmen von Verschlüsselung oder ähnlichem macht (wie der SHA-Algorithmus).
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • Ich nutze Bitoperatoren unter PHP nur in Zusammenspiel mit MySQL.

    Interessanter Artikel: dev.mysql.com/tech-resources/a…s/mysql-set-datatype.html
    The MySQL SET datatype allows us to handle multiple values with a lot less trouble than if we had our table fully normalized. Our schema is simplified because we only need one column instead of three tables to store our list of interests. The MySQL SET datatype allows us to compare multiple values without using complex JOIN operations. We can manipulate the set with binary functions to do complex comparisons by comparing bit values on a single column instead of comparing multiple rows of multiple tables.


    Ein BITSET nimmt natürlich nicht weniger Platz ein als ein INTEGER oder ein Boolean. Aber in ein BITSET passen eben 8 solcher Booleans ;)
    Wir haben uns in der Firma entschieden das mit einer Klasse nochmal in PHP zu abstrahieren um spezielle Queries (siehe doku) einfach zu handhaben.. und um die übertragenen Queriestrings womöglich nochmal zu kürzen (vermutlich unwesentlich)...

    Bitsets sind natürlich kein Allheilmittel. Sie tragen nicht gerade zur Datenbank Normalisierung bei.