Ich suche eine Funktion, die einen beliebiegen String aus Hex-Zeichen zu einem INT Wert macht. Entweder bin ich blind, oder das gibt es wirklich noch nicht. In Oscat gibt es DWORD_TO_STRH - das ist halt falsch herum.
Also in etwa:
testString := 'AB04';
i := INT;
i := StringH_To_Int ( testString ); ( i= 43780 )
Ideen?
Grüße,
Tobi
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
FUNCTION_BLOCKStringToDwordVAR_INPUTÂ Â InputString:Â Â STRING(9);END_VARVAR_OUTPUTÂ Â NoNumber:Â Â Â Â BOOL;Â Â StringToDword:Â Â DWORD;END_VARVARÂ Â Char:Â Â Â Â Â Â Â Â STRING(1);Â Â Wert:Â Â Â Â Â Â Â Â INT;Â Â Pt_1:Â Â Â Â Â Â Â Â POINTERTOBYTE;Â Â i:Â Â Â Â Â Â Â Â Â Â INT;END_VAR
StringToDWORD:=0;NoNumber:=FALSE;IFLEN(InputString)>8THENNoNumber:=TRUE;END_IFFORi:=0TO(LEN(InputString)-1)DO
  Char:=MID(Inputstring, 1, i+1);
  Pt_1:=ADR(Char);
  StringToDWORD:=SHL(StringToDWORD,4);
  Wert:=DWORD_TO_BYTE(Pt_1^);
    CASEWertOF
    48..58:
        StringToDWORD:=StringToDWORD+INT_TO_DWORD(Wert-48);
    65..70:
        StringToDWORD:=StringToDWORD+INT_TO_DWORD(Wert-55);
    97..102:
        StringToDWORD:=StringToDWORD+INT_TO_DWORD(Wert-87);
    ELSE
      NoNumber:=TRUE;END_CASEEND_FOR
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Danke, Danke. So hatte ich mir das auch schon gedacht - komisch nur, dass das in keiner 'umfangreichen' Lib (Oscat?) implemetiert ist. Das konnte ich halt nicht glauben und habe mir da Blindheit unterstellt - aber es ist wohl tatsächlich so.
Wie gesagt, danke schön!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo zusammen.
Ich suche eine Funktion, die einen beliebiegen String aus Hex-Zeichen zu einem INT Wert macht. Entweder bin ich blind, oder das gibt es wirklich noch nicht. In Oscat gibt es DWORD_TO_STRH - das ist halt falsch herum.
Also in etwa:
testString := 'AB04';
i := INT;
i := StringH_To_Int ( testString ); ( i= 43780 )
Ideen?
Grüße,
Tobi
anbei als Lib (geringfügig modifiziert und mit ein paar Kommentaren versehen).
HexStringToDword.zip [1.37 KiB]
Danke, Danke. So hatte ich mir das auch schon gedacht - komisch nur, dass das in keiner 'umfangreichen' Lib (Oscat?) implemetiert ist. Das konnte ich halt nicht glauben und habe mir da Blindheit unterstellt - aber es ist wohl tatsächlich so.
Wie gesagt, danke schön!
warum ist hex_to_int nicht in oscat?
wir hatten uns bisher nicht gedacht das jemand so eine fumktion benötigt, wozu brauchst du sowas eigentlich?
Ich habe mittlerweile auch noch einen anderen Ansatz probiert - der baut aber auf dem gleichen Prinzip auf.
Ich verwende das, um auf einem HMI per Touchscreen hexwerte einzugeben, die ich aber auch als Base10-Zahl anzeigen lassen will.
Mich hatte das halt nur verwundert, dass die umfangreiche Oscat das nicht bietet.
Nun wende ich bei jeden Tastendruck ein SHL und ein AND auf meien bisherigen INT-Wert an. klappt auch.
Danke & Gruß
Hallo Tobi,
dein Argument mit der HExadezimaltastatur hat uns nun doch überzeugt.
in der 2.2. wird die funktion enthalten sein.
anbei der code:
FUNCTION HEX_TO_DWORD : INT
VAR_INPUT
END_VAR
VAR
END_VAR
(*
version 1.0 6 oct 2006
programmer hugo
tested by tobias
HEX_TO_DWORD converts a Hexadecimal string into a DWORD.
pt := ADR(hex);
FOR I := 0 TO LEN(hex) - 1DO
END_FOR
(* revision histroy
hm 2.10.2007 rev 1.0
*)
Hehe - schöne Sache!