Ankündigung

Einklappen
Keine Ankündigung bisher.

Hexadezimal in Dezimal umwandeln

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Hexadezimal in Dezimal umwandeln

    Hallo Zusammen,

    ich habe beispielsweise folgende hexadezimale Temperaturwerte und möchte diese im EibPC in eine dezimale Fließkommazahl umrechnen:

    000000ed (entspricht 23,7 °C)

    fffffffa (entspricht -0,6 °C)

    Hat jemand eine Idee, wie dies umsetzbar ist?

    Ich bastele schon einige Zeit mit stringformat herum, aber die Beschreibung im Handbuch gibt nichts eindeutiges dazu her.

    Viele Grüße

    Michael

    #2
    was für ein Format ist das denn überhaupt? Jedenfalls kein klassisches "hex".
    Wer/was liefert diese Werte?
    ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

    Kommentar


      #3
      Hallo Uwe,

      das Format wird so von meiner Wärmepumpe auf ihrem Java Webserver bereitgestellt.

      In Excel kann ich die Werte ganz normal über HEXINDEZ() umwandeln. Dabei muß ich nur noch dazusagen, dass die errechneten Dezimalwerte immer anschließend durch 10 geteilt werden müssen. Die Wärmepumpe normiert alle Temperaturwerte in der Datenausgabe um den Faktor 10.

      Viele Grüße

      Michael

      Kommentar


        #4
        ok, 0xed = 237, durch 10=23,7. So macht das wieder Sinn.

        Aber dann ist es doch auch nciht schwer umzurechnen.

        Du musst jeden Buchstaben einzeln separieren und mit seiner Wertigkeit multiplizieren. Alles aufaddieren und durch 10 teilen. Ok, werden schon ein paar Zeilen Code werden....

        Gibt's nciht vielleicht schon einen Makro um hex in dec zu wandeln?
        ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

        Kommentar


          #5
          Hallo Uwe,

          ja ein Makro dafür zu schreiben wäre kein großes Problem.

          Ich dachte nur eigentlich dies würde mit stringformat direkt funktionieren, aber vielleicht bin ich da ja auf dem Holzweg.

          Die stringformat Beschreibung läßt jegliche Interpretation zu.

          Viele Grüße

          Michael

          Kommentar


            #6
            ach so....

            die Beschreibung zu stringformat ist leider wirklich nciht optimal, aber ich glaube die kann nur Dec=>Hex und nciht umgekehrt.
            ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

            Kommentar


              #7
              Probier es doch mal so:

              [highlight=epc]
              Test = $000000ed$
              MyValue = convert($0x$+Test,0u32)
              MydecimalValue = convert(MyValue,0f32) / 10.0f32
              [/highlight]

              Gruß,
              Bernd

              Kommentar


                #8
                convert kann hex in dec?

                Steht das irgendwo, oder muss man das wissen?
                ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                Kommentar


                  #9
                  Wenn man enertex Makros liest fragt man sich warum machen die das nun so komisch und stellt fest: das geht ja!

                  Gruß,
                  Bernd

                  Kommentar


                    #10
                    Hi Bernd,

                    der von Dir vorgeschlagene Code funktioniert grundsätzlich.

                    [highlight=epc]
                    Test = $000000ed$
                    MyValue = convert($0x$+Test,0u32)
                    MydecimalValue = convert(MyValue,0f32) / 10.0f32
                    [/highlight]

                    In dem Fall enthält die Variable Test aber Hexadezimal 30 30 30 30 30 30 65 64, also als erweiterter Text 000000ed

                    In meinem Fall ziehe ich aber aus dem Datenstrom der Wärmepumpe per split 4 Bytes, damit hat die Variable Test in Hexadezimal 00 00 00 00 ED, also als erweiterter Text irgendetwas nicht darstellbares.

                    Hast Du noch irgendeine Idee?

                    Ansonsten muß ich mir wirklich ein etwas längeres Makro programmieren, das dies zu Fuß berechnet.

                    Viele Grüße

                    Michael

                    Kommentar


                      #11
                      Aufgrund des Beispiels von Bernd beschleicht mich gerade so das ungute Gefühl, dass ich überhaupt nicht mit Bordmitteln an die Hex Zahlen in der Variable herankomme und diese weiterverarbeiten kann.

                      Der EibPC scheint ja bei C1400 Variablen immer nur mit dem erweitertem Text zu arbeiten.

                      Enertegus/Steffi: Gibt es eine Chance aus dem 000000ed der u.g. Variable die Dezimal 237 zu "entschlüsseln"?


                      % Wert von Objekt 8365 (WP_Temperatur_Ruecklauf1) abfragen:
                      % /Applications/EibStudio/EibstudioData/nconf.bin -q 8365 192.168.0.42
                      % Wert von Objekt 8365: 00 00 00 ed 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 {2012-04-19 17:54:52}
                      % Typ: erweiterter Text
                      % Wert:
                      %

                      Kommentar


                        #12
                        Jetzt weiß ich was Du möchtest:

                        [highlight=epc]
                        // MyString ist belegt mit $(NUL)(NUL)(NUL)(0xed)(NUL)(NUL) ... usw.$
                        My4Bytes = split( MyString, 0u16,3u16)
                        MyValue = stringcast( My4Bytes, 0u32,0u16)
                        [/highlight]

                        oder kürzer:

                        [highlight=epc]
                        // MyString ist belegt mit $(NUL)(NUL)(NUL)(0xed)(NUL)(NUL) ... usw.$
                        MyValue = stringcast( MyString, 0u32, 0u16)
                        [/highlight]

                        Gruß,
                        Bernd

                        Kommentar


                          #13
                          Zitat von bmx Beitrag anzeigen
                          Jetzt weiß ich was Du möchtest:
                          Danke Bernd!

                          Wir sind morgen noch auf der L&B, nächste Woche wieder mehr hier von meiner Seite - wir haben leider oder Gottseidank keine Zeit während der Messe groß ins Forum zu schauen.
                          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                          Enertex Produkte kaufen

                          Kommentar


                            #14
                            Hallo Bernd,

                            warum verändert der stringcast Befehl den die Reihenfolge der Hex Zahlen?

                            My4Bytes: 00 00 00 ec 00 00 00 00 00 00 00 00 00 ...

                            -> MyValue: ec 00 00 00
                            -> Wert: 3959422976

                            Ohne dies wäre das genau die von mir benötigte Lösung.

                            Falls es nicht anders geht, müßte ich die My4Bytes so in der Reihenfolge drehen:

                            My4BytesInverted=split(My4Bytes,3u16,4u16)+split(M y4Bytes,2u16,3u16)+split(My4Bytes,1u16,2u16)+split (My4Bytes,0u16,1u16)

                            Sieht irgendwie in Summe strange aus ...

                            Viele Grüße

                            Michael

                            Kommentar


                              #15
                              Hi Michael,

                              das ist ein Problem weil der EibPC und die Wärmepumpe ihre Daten eines u32 bzw. s32 unterschiedlich ablegen: Der eine hat little endian und der andere big endian.

                              (z.B. Apple PowerPC vs. Intel x86 basierende PC. Findet man übrigens im Tiff-Header eine Magic Number die genau das zum Thema hat um zu erkennen wie die Daten im Bild codiert sind).

                              In diesem Fall habe ich auch keine elegantere Idee als die Bytes zu splitten, zusammenzusetzen und dann zurückzuwandeln.
                              Logisch würde ich mir das in ein Makro verpacken

                              Gruß,
                              Bernd

                              Kommentar

                              Lädt...
                              X