Char to int

Energie85

Level-2
Beiträge
43
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich möchte eine Zeichenkette vom Datentyp char die auf einen Datenbaustein liegt in einen Integer umwandeln.
Wie mache ich das am besten? Könnt ihr mir da weiter helfen?
 
Es gibt in der standartlib den FC37 der einen String in einen DI wandelt!

Ich hab mir irgenwann mal selber einen geschrieben:

Code:
FUNCTION FC 138 : VOID
TITLE =
//===================================================
//Technische Daten:
//====================================================
//           Version: 2.00
//             Datum: 01.09.2009
//====================================================
//             Autor: Kühner J.
//Baustein Name Symb: STD_ASCII_TO_DINT
//====================================================
//Beschreibung:
//
//Dieser FC wandelt einen Pointer auf Ascii Zeichen in
//einen DINT um. Falls zwischen den Ziffern noch andere
//Zeichen stehen gibt er 0 raus. Am Anfang dürfen noch
//andere Zeichen stehen, nur nicht dazwischen!
//====================================================
//Versionsänderungen:
//
//von 1.00 auf 2.00
//  - backup DB, AR1
VERSION : 0.1




VAR_INPUT
  ASCII : ANY ;	
END_VAR
VAR_OUTPUT
  DINTVAL : DINT ;	
END_VAR
VAR_TEMP
  ASCII_LOC : DWORD ;	
  RETVAL : INT ;	
  SCHLEIFE_MAX : INT ;	
  SCHLEIFE : INT ;	
  FAKTOR : DINT ;	
  ZAHL : DINT ;	
  ZAHL_WAR_DA : BOOL ;	
  DB_NR : INT ;	
  backup_DB : INT ;	
  backup_AR1 : DWORD ;	
END_VAR
BEGIN
NETWORK
TITLE =


//Backup
      L     DBNO; 
      T     #backup_DB; 
      TAR1  ; 
      T     #backup_AR1; 


//Initialisieren
      L     0; 
      T     #ZAHL; 
      T     #DINTVAL; 
      SET   ; 
      R     #ZAHL_WAR_DA; //Es wurde schon eine Zahl gelesen. (Es wird damit geprüft ob zwischen den Ascii Zeichen ein Buchstabe kommt, dann 0 als ergebniss!)


//Pointer auf Ascii laden
      L     P##ASCII; 
      LAR1  ; 


//Schleife mit Länge des Pointers initialisieren
      L     W [AR1,P#2.0]; 
      T     #SCHLEIFE_MAX; 


//Datentyp ermitteln, nur Byte gültig!
//      L     B [AR1,P#1.0]
// 4 - 5 -->  Länge 2
// 6 - 8 -->  Länge 4


//DB des Pointers öffnen (falls vorhanden!)
      L     0; 
      L     W [AR1,P#4.0]; 
      ==I   ; 
      SPB   spOK; 
      T     #DB_NR; 
      AUF   DB [#DB_NR]; 


//Wenn Speicherbereich DI, in DB ändern
      L     B [AR1,P#6.0]; 
      L     B#16#85; //Speicerbereich DI??
      ==I   ; 
      SPBN  spOK; 
      L     B#16#84; //Speicherberich DB
      L     B [AR1,P#6.0]; 


//Startadresse in AR1 laden
spOK: L     D [AR1,P#6.0]; 
      LAR1  ; 


//Potenzfaktor Startwert
      L     L#1; 
      T     #FAKTOR; 


//max Potenzfaktor bestimmen (10^(LängeAny-1), ausser wenn Schleife_max = 1, da loop sonst ins negative dekrementiert!
      L     0; 
      L     #SCHLEIFE_MAX; 
      +     -1; 
      ==I   ; 
      SPB   sl2; 


sl1:  T     #SCHLEIFE; 
      L     L#10; 
      L     #FAKTOR; 
      *D    ; 
      T     #FAKTOR; 
      L     #SCHLEIFE; 
      LOOP  sl1; 


//Aktuelles Zeichen laden und prüfen ob Ziffer
sl2:  U(    ; 
      L     '0'; 
      L     B [AR1,P#0.0]; 
      >I    ; 
      )     ; 
      O(    ; 
      L     '9'; 
      >I    ; 
      )     ; 
      SPBN  GU; 


//Ungültige Ziffer in den Zahlen
      U     #ZAHL_WAR_DA; 
      SPB   ende; 


      SPA   niGU; 


//Wenn Ziffer dann zu Zahl addieren
GU:   L     B [AR1,P#0.0]; 
      L     '0'; 
      -I    ; 
      L     #FAKTOR; 
      *D    ; 
      L     #ZAHL; 
      +D    ; 
      T     #ZAHL; 


      SET   ; 
      S     #ZAHL_WAR_DA; 


niGU: L     1; 
      L     #FAKTOR; 
      ==D   ; 
      SPB   Fin; 
      L     L#10; 
      /D    ; 
      T     #FAKTOR; 


      L     P#1.0; 
      +AR1  ; 
      SPA   sl2; 


Fin:  L     #ZAHL; 
      T     #DINTVAL; 


ende: L     #backup_DB; 
      AUF   DB [#backup_DB]; 
      L     #backup_AR1; 
      LAR1  ; 
END_FUNCTION
 
Die Funktion wandelt doch einen String in einen Integer um.
Kann die Funktion auch Zeichen vom Datentyp char in einen Integer umwandeln?
 
Zurück
Oben