Hexadezimalwert-Berechnung

Willkommen!

Wenn du im Nexave-Forum mitmachen möchtest, schreib an community@nexave.de. Wir haben die Registrierungsfunktion in unserem Diskussionsforum nämlich deaktiviert, weil sich praktisch nur noch Spammer und Werbebots registriert haben. Per E-Mail sind wir dir gern behilflich, einen Account anzulegen.
  • ... ich habe mir ein paar funktionen geschrieben, um CRC32-Prüfsummen zu berechnen... alles perfekt... ich kriege die werte dezimal, da ich sie aber hexadezimal haben will, abe ich mir dazu eine funktion geschrieben:

    dabei ist integer die dezimalzahl, von der der hexadezimale wert generiert werden soll,
    result[8] ist die rückgabe der funktion,
    neuint ist die aktuelle zahl, durch 16 geteilt,
    rawint ist das gleiche, nur ohne nachkommastellen,
    diff ist der unterschied, also der rest zwischen den beiden,
    rest ist der rest im aktuellen schleifendurchgang,
    cnt ist die anzahl der schleifendurchgänge.


    ich hoffe ich hab alles wichtige erklärt... die Rechenweise findet man hier: Wikipedia


    soweit funktioniert das auch. doch wenn ich jetzt zb den hexwert von 1543535498 (CRC32 von "1") haben will, kommt im simulator

    Zitat

    run68k.c, Line:2202, Invalid read from 076748B8

    ... woher kommt das? was ist der fehler? und wie kann ich ihn beheben?

    History:
    24.12.2000: Palm m100 (funzt noch einwandfrei...)
    15.07.2004: PalmOne Zire 71 (Verbindung Cradle-Anschluss->Gerät defekt => nicht mehr aufladbar)
    10.05.2006: PalmOne LifeDrive (am 29.9. zw. 22 und 22:15 geklaut-.-)

  • hab den fehler gefunden... ich musste float durch double ersetzen, da float für so hohe zahlen nicht ausreicht...


    nächstes problem:
    wie kann ich einen UInt32 oder long in einen double umwandeln? wenn ich das so mache:

    Code
    (double)integer
    zB:
    (double)1543535498 = 31626 (!?)

    klappts nicht. woran liegt das? wie geht es richtig?

    History:
    24.12.2000: Palm m100 (funzt noch einwandfrei...)
    15.07.2004: PalmOne Zire 71 (Verbindung Cradle-Anschluss->Gerät defekt => nicht mehr aufladbar)
    10.05.2006: PalmOne LifeDrive (am 29.9. zw. 22 und 22:15 geklaut-.-)

  • Hi!


    Mit den Variablen-Formaten hab ich auch so meine Not. Daher kann ich Dir diesbezüglich nicht weiter helfen.


    Zur Hex-Umrechnung - geht es komplizierter?
    Gut, ich hab noch nicht so große Erfahrung in Palm-Programmierung, siehe auch ersten Abstatz. Aber wenn der Wert als Integer vorliegt, wozu dann die Fließkomma-Einheiten quälen? Gibt es kein AND?


    Schleife, Wert AND 15, diesen als Char (hex[Wert AND15]) einem String voranstellen, dann Wert 4x SHIFT RIGHT (glaub das geht), bis dieser Null ist. Fertig. Rasch, einfach, sicher.


    Greetings, F r i t z.

  • Zitat

    Original von Fritzens
    Schleife, Wert AND 15, diesen als Char (hex[Wert AND15]) einem String voranstellen, dann Wert 4x SHIFT RIGHT (glaub das geht), bis dieser Null ist. Fertig. Rasch, einfach, sicher.

    ... das hab ich jetzt nicht so richtig kapiert... was meinst du mit

    Zitat

    Wert 4x SHIFT RIGHT

    ?


    trotzdem thx für die antwort...


    MisterX

    History:
    24.12.2000: Palm m100 (funzt noch einwandfrei...)
    15.07.2004: PalmOne Zire 71 (Verbindung Cradle-Anschluss->Gerät defekt => nicht mehr aufladbar)
    10.05.2006: PalmOne LifeDrive (am 29.9. zw. 22 und 22:15 geklaut-.-)

  • Wenn man eine Zahl bitweise nach rechts schiebt, entspricht das einer Division durch zwei, wobei das letzte Bit (das niederwertigste, rechteste) wegfällt, dafür links (höherwertiges Bit, das linkeste) eine 0 dazu kommt. Wird dies viermal durchgeführt, entspricht dies einer Division durch 2*2*2*2 = 16.


    Meistens wird ein SHIFT mit >> angegeben, also Zahl>>4 sollte soviel sein wie Zahl DIV 16 (ganzzahlig eben).


    SHIFT nach links entspricht demnach einer Mulitplikation mit 2.


    Statt AND geht manchmal auch MOD, da wird der Rest der Division zurückgegeben. Also Zahl MOD 16 ist soviel wie Zahl AND 15. Nur weiß ich nicht, ob das die Palm-CUPs können, bzw. wie das der Compiler umsetzt. Unter Palmphi geht das glaube ich nicht, kann mich aber auch irren.
    Unter C war das mal so: / bedeutete Division, \ bedeutete Mod (Rest).


    Wenn ich dazu komme, schreib ich die Routine, kann derzeit aber nicht, leider.


    Ach ja, die Routine wird beendet, indem führende 0en noch vor den String gesetzt werden. Zur Verschönerung noch ein "0x" davor, dann ist es eindeutig als Hex-Zahl erkennbar.


    Greetings, F r i t z.