OctetString --> Float

Nisbo

Bekanntes Mitglied
ARG: Der Titel sollte heißen OctetString --> Float

Servus,

ich spiele gerade etwas mit SNMP rum um Werte aus einem Netzwerkgerät auszulesen, das funktioniert auch bei den Werten welche als "Klartext" vorliegen wie z.B. Integer

Jetzt liegen allerdings auch einige Werte als OctetString vor, die Konvertierung in ASCII habe ich hinbekommen
Java:
    static String hex2AscII(String hex) {
         StringBuilder ascii = new StringBuilder();
         for (int i = 0; i < hex.length(); i+=2) {
             String str = hex.substring(i, i+2);
             ascii.append((char)Integer.parseInt(str, 16));
         }
         
         return ascii.toString();
    }

Jetzt gibt es aber auch Werte die müssen in FLOAT umgerechnet werden

Da habe ich jetzt z.B. e6d94c41
welches dann 12.8 Volt ergeben sollte
wenn ich das umrechne dann erhalte ich aber -5.1308008E23

Java:
String myString = "e6d94c41";
        Long i = Long.parseLong(myString, 16);
        Float f = Float.intBitsToFloat(i.intValue());
        System.out.println(f);
        System.out.println(Integer.toHexString(Float.floatToIntBits(f)));

Die MiB zum Wert sagt
- OCTECT STRING (SIZE(4))
- It should be changed to float format

So wo liegt der Fehler ?
 

knilch

Bekanntes Mitglied
Hi,
Du schreibst von einer Zahl, welche als octet vorliegen soll, aber konvertierst die Zahl mit Basis 16. Oktet hat Basis 8, nicht 16 (Hexadezimal)
 

Nisbo

Bekanntes Mitglied
8 geht nicht dann kommt ne Nullpointer Exception, die Konvertierung muss übrigens 10 sein, konnte das oben nur nicht mehr ändern.

Ich habe meinen Fehler aber inzwischen gefunden, ich muss von rechts nach links lesen

das Ganze schaut jetzt so aus

Java:
String sysDescr = "e6:d9:4c:41";
        String myString = ""+hex2Float(sysDescr.replace(":", ""));
        Long i = Long.parseLong(myString, 10);
        Float f = Float.intBitsToFloat(i.intValue());
        System.out.println("Voltage: " + f);
        valueVoltage.setText(f.toString());


.
.
.
.



    static String hex2Float(String ss) {
         String HEXES = "0123456789ABCDEF";
         System.out.println("Test: "+ss);
         String s = ss.substring(6,8) + ss.substring(4,6) + ss.substring(2,4) + ss.substring(0,2);
         System.out.println("Test: "+s);
       int val = 0;
       for (int i = 0; i < s.length(); i++) {
           char c = s.charAt(i);
           int d = HEXES.indexOf(c);
           val = 16*val + d;
       }
     
       return Integer.toString(val);
   }

Als Ausgabe bekomme ich
Voltage: e6:d9:4c:41
Test: e6d94c41
Test: 414cd9e6
Voltage: 11.9357815

aber ich erwarte 12.803198 Volt im Vergleich zu
Java:
System.out.println("################# TestSection ################# ");
        int hex = 0x414cd9e6;
         f = Float.intBitsToFloat(hex);
        System.out.println(f);
        System.out.printf("%f", f);

Da ist wohl irgendwie ein "Rundungsfehler" (ja ich weiß ich nicht das richtige Wort) drin.
 

Nisbo

Bekanntes Mitglied
So Problem beseitigt, jetzt muss ich nur noch einen passenden Namen für die Methode finden ^^

Java:
String sysDescr = "c6:f9:50:41";
String myString = hex2StringRightToLeft(sysDescr);


Java:
   static String hex2StringRightToLeft(String octetString) {
       octetString = octetString.replace(":", "");
      
       String s = "";
       for (int i = 0; i < octetString.length(); i++) {
           s = octetString.substring(i,i+2) + s;
           i++;
       }
    
       return String.valueOf(Float.intBitsToFloat(Integer.parseInt(s, 16)));
   }
 

Tarrew

Top Contributor
Mal ein Beispiel als Alternative:
Java:
        String s = "41:4c:d9:e6";
        float f = ByteBuffer.allocate(4).putInt(Integer.parseInt(s.replaceAll(":", ""), 16)).getFloat(0);

bzw. wenn man den String umdreht wie in deinem letzten Fall:
Java:
String s = "c6:f9:50:41";
float f = ByteBuffer.allocate(4).putInt(new BigInteger(s.replaceAll(":", ""), 16).intValue()).order(ByteOrder.LITTLE_ENDIAN).getFloat(0);
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Arif Datentypen Float-Rundungsfehler Allgemeine Java-Themen 5
H float Berechnung: Ergebnis ohne wissenschaftliche Notation Allgemeine Java-Themen 5
RalleYTN float in WORD konvertieren Allgemeine Java-Themen 1
P Wird double und float auf jedem Computer gleich berechnet? Allgemeine Java-Themen 10
J Datentypen String in Float umwandeln und "umbauen"? Allgemeine Java-Themen 5
M float, double, BigDecimal Allgemeine Java-Themen 5
S Variablen Prüfen ob Number vom Typ Integer, Float, Double, ... ist Allgemeine Java-Themen 2
N Variablen Gleitkommazahlen - Kleineres float? Allgemeine Java-Themen 11
P Datentypen float mit komma statt punkt möglich? Allgemeine Java-Themen 6
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
B Variablen Bug of Float. & Double.MIN_VALUE! Allgemeine Java-Themen 4
Tobse 8 bit float Allgemeine Java-Themen 6
M FIFO Queue: bytes in, float/double/etc out Allgemeine Java-Themen 5
vandread Float/Double probleme bei der Multiplikation?! Allgemeine Java-Themen 3
F Float Division - Nachkommastelle bei 0 ausblenden Allgemeine Java-Themen 2
Developer_X "String" in "int" umwandeln, und dann "int" in "float" Allgemeine Java-Themen 8
G String nach Float parsen Allgemeine Java-Themen 2
E hex- Stirng in einen float umwandeln Allgemeine Java-Themen 9
MQue Float- Wert formatieren Allgemeine Java-Themen 8
E int vs. float vs. double Allgemeine Java-Themen 7
spacegaier Kommastellen aus float extrahieren Allgemeine Java-Themen 13
G WAV-Samples bearbeiten oder: 2 Bytes -> short -> float Allgemeine Java-Themen 5
J Float Formatierung? Allgemeine Java-Themen 6
P string zu float - darstellungsproblem Allgemeine Java-Themen 4
G Verständnisproblem double und float Allgemeine Java-Themen 7
W Division mit float und double Allgemeine Java-Themen 2
B Umwandeln von Bytes in float Zahl (DataInputStream) Allgemeine Java-Themen 3
W float/double verhält sich seltsam Allgemeine Java-Themen 6
R Float richtig in Integer ? Allgemeine Java-Themen 4
N Float zahl auf eine Stelle nach dem Komma runden Allgemeine Java-Themen 3
A Float-Wert auf 2 Stellen nach den Komma runden ? Allgemeine Java-Themen 2
H Multiplikation int*float Allgemeine Java-Themen 2
V Typumwandlung Integer, Float etc in String Allgemeine Java-Themen 4
S Rechnen mit float Zahlen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben