hilfdirselbst.ch
Facebook Twitter gamper-media
Mac OS X enthält verschiedene integrierte Werkzeuge und Technologien, mit denen sich gängige Aufgaben schnell und einfach automatisieren lassen.
Hans Haesler  M  p
Beiträge: 5531
24. Sep 2003, 17:18
Beitrag #1 von 1
Bewertung:
(753 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Hexadezimal-Wert in Dezimalzahl umrechnen


Hier ist ein einfacher Handler, welcher einen Wert im Hexadezimal-Format in eine Dezimalzahl umrechnet. Ich sage "einfach", weil ich der Lesbarkeit halber darauf verzichtete, die möglichen Schreibweisen abzudecken (z.B. die Buchstaben A bis F kleingeschrieben statt gross oder beginnend mit einem Dollarzeichen oder mit "0x"). Auch wird nicht eingeschritten, wenn Zeichen vorkommen, welche nichts in einem Hexadezimal-Wert zu suchen haben.

In den String 'hexVal' sollte man daher nur einen validen Hexadezimal-Wert setzen.
---
set hexVal to "0000F333"

hexToInteger(hexVal)

on hexToInteger(hexVal)
  set hexStr to "0123456789ABCDEF"
  set intVal to 0
  set nPower to 1
  repeat with i from (count of hexVal) to 1 by -1
    set hexChar to text i thru i of hexVal
    set hexOff to (offset of hexChar in hexStr) - 1
    set intVal to intVal + (hexOff * nPower)
    set nPower to nPower * 16
  end repeat
  return intVal
end hexToInteger
---
Dem Handler 'hexToInteger' wird der Wert im Hexadezimal-Format übergeben. Die Variable 'hexStr' enthält die Hexadezimal-Werte (von 0 bis 16). Die Variable 'intVal' wird initialisiert und auf Null gesetzt. Die Variable 'nPower' (die Potenz) wird auf 1 gesetzt, weil die Wiederholschleife mit der letzten Stelle beginnt: '... from (count of hexVal) to 1 by -1'.

Bei jedem Durchgang wird der Variablen 'hexChar' der Wert eines Zeichens übergeben. In die Variable 'hexOff' wird der Offset (das heisst die Position) des aktuellen Zeichens im String 'hexStr' gesetzt. Die Variable 'intVal' wird um den Wert aus der Position multipliziert mit der Potenz erhöht. Dieser Potenzwert wird anschliessend für den nächsten Durchgang vorbereitet, d.h. mit 16 multipliziert.

Am Schluss wird der Wert von 'intVal' zurückgegeben. Im obigen Beispiel ist es 62259. Wenn 65536 als 100% gelten, dann ergibt die Formel 'set x to (intVal / 655.35) div 0.01 / 100' ein Resultat von 95.0

Hans Haesler <hsa@ringier.ch> Top
 
X