Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 5 von 5

Thema: Utf-8 - Array in Gleitkommazahl (signed)

  1. #1
    Registriert seit
    28.10.2015
    Beiträge
    30
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich habe ein Array von Bytes. Ich empfange über TCP UTF-8 Strings
    z.B die Zahl 0,4289 wird in dem Array wie folgt abgespeichert immer
    utf-8 encoded: 48, 44 (,), 52, 50, 56, 57.
    Gibt es bereits Funktionen die das abnehmen d.h in Unsigned Real direkt umwandeln.
    Zitieren Zitieren Utf-8 - Array in Gleitkommazahl (signed)  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Gibt es vielleicht für Deine SPS die Funktion STRING_TO_REAL()?
    Ansonsten vielleicht 1x oder 2x STRING_TO_WORD() oder ähnliches nehmen und entsprechend Position des Dezimalkommas dividieren.
    Ansonsten Zeichen für Zeichen zu DINT und danach zu REAL wandeln ist auch nicht schwer.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    sadik ist offline Benutzer
    Themenstarter
    Registriert seit
    28.10.2015
    Beiträge
    30
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Gibt es vielleicht für Deine SPS die Funktion STRING_TO_REAL()?
    Ansonsten vielleicht 1x oder 2x STRING_TO_WORD() oder ähnliches nehmen und entsprechend Position des Dezimalkommas dividieren.
    Ansonsten Zeichen für Zeichen zu DINT und danach zu REAL wandeln ist auch nicht schwer.

    Harald
    Ok das Problem ist ich habe Zahlenwerte als UTF-8 kodiert z.B die Zahl 0 ist in meinem Array als Hex in UTF-8 16#30 usw.
    Macht hier STRING_TO_REAL kein Sinn eigentlich und STRING_TO_WORD und die weiteren weil sie UTF-8 und die entsprechende Repräsentation nicht kennen.

    z.B STRING_TO_REAL('48') (*48 === 0 in UTF-8*) leifert als Ergebbis 48.

  4. #4
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard

    48 ist doch der UTF8 codierte ASCII Wert im Array, oder? Dann verstehe ich das STRING_TO_REAL('48') aus dem letzten Post nicht.

    Code:
    VAR 
        arTestArray: ARRAY[0..6] OF BYTE:= [48, 46, 52, 50, 56, 57, 0];
        pTestString: POINTER TO STRING;
        rRealValue: REAL;
    END_VAR
    pTestString:= ADR(arTestArray);
    rRealValue:= STRING_TO_REAL(pTestString^);
    Es könnte mit STRING_TO_REAL direkt gehen, wenn das Byte-Array über Pointer als STRING interpretiert wird.
    Allerdings muss ',' durch '.' ersetzt werden, bzw. 44 durch 46. Und der letzte Wert muss 0 sein, damit sich aus den ARRAY-Werten ein nullterminierter STRING ergibt.

    witkatz
    Geändert von witkatz (12.04.2016 um 14:00 Uhr)

  5. #5
    sadik ist offline Benutzer
    Themenstarter
    Registriert seit
    28.10.2015
    Beiträge
    30
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke es funktioniert.
    Zitat Zitat von witkatz Beitrag anzeigen
    48 ist doch der UTF8 codierte ASCII Wert im Array, oder? Dann verstehe ich das STRING_TO_REAL('48') aus dem letzten Post nicht.

    Code:
    VAR 
        arTestArray: ARRAY[0..6] OF BYTE:= [48, 46, 52, 50, 56, 57, 0];
        pTestString: POINTER TO STRING;
        rRealValue: REAL;
    END_VAR
    pTestString:= ADR(arTestArray);
    rRealValue:= STRING_TO_REAL(pTestString^);
    Es könnte mit STRING_TO_REAL direkt gehen, wenn das Byte-Array über Pointer als STRING interpretiert wird.
    Allerdings muss ',' durch '.' ersetzt werden, bzw. 44 durch 46. Und der letzte Wert muss 0 sein, damit sich aus den ARRAY-Werten ein nullterminierter STRING ergibt.

    witkatz

Ähnliche Themen

  1. Step 7 Gleitkommazahl
    Von defender882001 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 26.09.2013, 17:45
  2. Gleitkommazahl in INT darstellen
    Von taylor1982 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 01.02.2011, 20:32
  3. S5 Gleitkommazahl <-> Integer
    Von Eddy001 im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 31.01.2009, 12:38
  4. B&R: Gleitkommazahl verwenden
    Von fighter im Forum Sonstige Steuerungen
    Antworten: 4
    Letzter Beitrag: 09.10.2008, 22:10
  5. Gleitkommazahl in Byte konvertiern????
    Von Anonymous im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 23.01.2006, 20:14

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •