Hex --> Dec || Dec --> Hex

    • Skript

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

    • Hex --> Dec || Dec --> Hex

      Jetzt die aktualisierte Version von GMLScript.com

      hex_to_dec(hex)

      GML-Quellcode

      1. /*
      2. ** Usage:
      3. ** hex_to_dec(hex)
      4. **
      5. ** Arguments:
      6. ** hex a string of hexadecimal digits, four bits per character
      7. **
      8. ** Returns:
      9. ** a non-negative integer
      10. **
      11. ** GMLscripts.com
      12. */
      13. {
      14. var hex,dec,h,p;
      15. hex = string_upper(argument0);
      16. dec = 0;
      17. h = "0123456789ABCDEF";
      18. for (p=1;p<=string_length(hex);p+=1) {
      19. dec = dec << 4 | (string_pos(string_char_at(hex,p),h)-1);
      20. }
      21. return dec;
      22. }
      Alles anzeigen


      dec_to_hex(dec)

      GML-Quellcode

      1. /*
      2. ** Usage:
      3. ** dec_to_hex(dec)
      4. **
      5. ** Arguments:
      6. ** dec a non-negative integer
      7. **
      8. ** Returns:
      9. ** a string of hexadecimal digits, four bits per character
      10. **
      11. ** GMLscripts.com
      12. */
      13. {
      14. var dec,hex,h,byte,hi,lo;
      15. dec = argument0;
      16. if (dec) hex = ""; else hex="00";
      17. h = "0123456789ABCDEF";
      18. while (dec) {
      19. byte = dec & 255;
      20. hi = string_char_at(h,byte div 16 + 1);
      21. lo = string_char_at(h,byte mod 16 + 1);
      22. hex = hi + lo + hex;
      23. dec = dec >> 8;
      24. }
      25. return hex;
      26. }
      Alles anzeigen


      Hier nochmal mein alter Post:
      Spoiler anzeigen
      Ich glaube, es interrestiert keinen wirklich warum ich das programmiert habe ^^, und deshalb gleich zur Sache:

      FunctionHexToInt

      GML-Quellcode

      1. execute_string("return $" + argument0);


      FunctionIntToHex

      GML-Quellcode

      1. var int, temp, hex;
      2. int = real(argument0);
      3. temp = "";
      4. hex = "";
      5. while (int!=0)
      6. {
      7. temp = string (int mod 16);
      8. int = floor(int/16);
      9. temp = string_replace(temp, "10", "A");
      10. temp = string_replace(temp, "11", "B");
      11. temp = string_replace(temp, "12", "C");
      12. temp = string_replace(temp, "13", "D");
      13. temp = string_replace(temp, "14", "E");
      14. temp = string_replace(temp, "15", "F");
      15. hex = temp + hex;
      16. }
      17. return hex;
      Alles anzeigen



      Für die Version Hex nach Int erschien mir dies am einfachsten.
      Ich weiß aber dennoch nichts über Ressourcen-Verbrauch und Geschwindikeit bei dieser Art. (Genau genommen bei beiden... :whistling: :D )



      mfg,
      swffilms

      PS.: Noch ein paar Tags für die Suchfunktion:
      hex to int
      int to hex
      hex nach int
      int nach hex
      hex2int
      int2hex
      dec

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von swffilms ()

    • Um eine Zahl zur Basis 10 in eine Zahl eines anderen Systems umzuwandeln, eignet sich folgender Code:

      GML-Quellcode

      1. //argument0=Eingabezahl argument1=Zielbasis
      2. var z,b,s,i,s2,t;
      3. z=argument0;
      4. b=argument1;
      5. s="";
      6. while(z!=0){
      7. t=mod(z,b);
      8. if (t>=10){
      9. /*Ersetzen*/
      10. s+=t;
      11. }
      12. else{
      13. s+=string(t);
      14. }
      15. z=floor(z/b);
      16. }
      17. //String umdrehen
      18. s2="";
      19. for (i=string_length(s);i>0;i+=1){
      20. s2+=string_copy(s,i,1);
      21. }
      22. return s2;
      Alles anzeigen


      Ist jetzt nur schnell aus dem Kopf hingeschrieben, könnten also noch ein paar kleinere Syntaxfehler drin sein.
      An die Stelle /*ersetzen*/ kommen dann switch Bedingungen hin, um Zahlen größer als 10 in Buchstaben umzusetzen.
      Gruß, Spellmaker.
      ___________________________________________________________
      Beware of wild pointers
      ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
    • Danke erstmal für die Kritik! Autsch! ^^

      copyboy schrieb:

      Wenn ich das schon sehe ... execute_string() :cursing:
      Kann ich nur empfehlen: GMLscripts.com :: Data & Number Conversion

      Danke für die Aufklärung, ich habe jetzt oben mit Hinweis die Musterlösungen reineditiert.

      maxda schrieb:

      Außerdem funktioniert das ja noch nichtmal! Wenn ich int 100 in hex umwandeln will, dann kommt bei deiner Methode A0 raus ist aber in wirklichkeit 64!
      Es reicht nicht 10 durch A, 11 durch B zu ersetzen!!!
      maxda

      Kann ich jetzt nicht viel zu sagen, bis auf, dass sämtliche Tests bei mir korrekt funktioniert haben.

      Spellmaker schrieb:

      Um eine Zahl zur Basis 10 in eine Zahl eines anderen Systems umzuwandeln, eignet sich folgender Code:

      GML-Quellcode

      1. //argument0=Eingabezahl argument1=Zielbasis
      2. var z,b,s,i,s2,t;
      3. z=argument0;
      4. b=argument1;
      5. s="";
      6. while(z!=0){
      7. t=mod(z,b);
      8. if (t>=10){
      9. /*Ersetzen*/
      10. s+=t;
      11. }
      12. else{
      13. s+=string(t);
      14. }
      15. z=floor(z/b);
      16. }
      17. //String umdrehen
      18. s2="";
      19. for (i=string_length(s);i>0;i+=1){
      20. s2+=string_copy(s,i,1);
      21. }
      22. return s2;
      Alles anzeigen


      Ist jetzt nur schnell aus dem Kopf hingeschrieben, könnten also noch ein paar kleinere Syntaxfehler drin sein.
      An die Stelle /*ersetzen*/ kommen dann switch Bedingungen hin, um Zahlen größer als 10 in Buchstaben umzusetzen.
      Gruß, Spellmaker.

      Danke auch für deinen Kommentar und deine Mühe, aber ich halte mich an den Ratschlag von Copyboy. ;)

      Also, schwamm drüber: Jetzt die Musterlösungen oben.