2017-01-14 5 views
0

現在、私はSNMP(snmp4jとSimpleSnmpClient)を使ってネットワークデバイスから情報を取得しています。 結果が整数のような「通常の」値である限り、これは機能します。Java - SNMP - OctetStringをFloatに変換

のようなOctetStringの場合、44:00:4f:00:30:00:4a:00:47:00:20:00:4d:00:49:00:58:00:00: 00:00:00:00:00:00:00:00:00:00:00:00:Unicodeとしてラベルされた00 私もそれをデコードすることができますが、私は交換する必要が前に ":"

hex2AscII(sysDescr.replace(":", "") 
をこの方法

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(); 
} 

今、私は電圧の値を取得したい、MIBは

語ります
  • オクテットSTRING(SIZE(4))
  • 私がSNMPクエリを実行し、結果として得るOKフォーマット

をフロートに変更する必要があります。 E6:D9:4C:41

魔女は今、私は

をフロートするためにそれを変換しよう 12.8ボルト

周りの電圧でなければなりません

System.out.println("################# TestSection ################# "); 
    int hex = 0xE6D94C41; 
    f = Float.intBitsToFloat(hex); 
    System.out.println(f); 
    System.out.printf("%f", f); 

-5.1308008E23

e6d94c41

を得るそれでは、私のコードが間違っていますか?ここで

答えて

0

は、Javaでそれを行うための適切な方法である:

import java.nio.ByteBuffer; 
import java.nio.ByteOrder; 

public class SnmpUtil{ 

    public static byte[] hexStringToByteArray(String s) { 
    int len = s.length(); 
    byte[] data = new byte[len/2]; 
    for (int i = 0; i < len; i += 2) { 
     data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) 
          + Character.digit(s.charAt(i+1), 16)); 
    } 
    return data; 
} 

    public static void main(String []args){ 

     byte[] bytes = SnmpUtil.hexStringToByteArray("e6d94c41"); 
     float f = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getFloat(); 
     System.out.println(f); 
    } 
} 
関連する問題