0

目前我正在使用 SNMP(snmp4j 和 SimpleSnmpClient)从网络设备获取一些信息。只要结果是像整数这样的“正常”值,它就可以工作。

如果值是像 44:00:4f:00:30:00:4a:00:47:00:20:00:4d:00:49:00:58:00:00:00:00:00 这样的 OctetString :00:00:00:00:00:00:00:00:00:00 标记为 Unicode 我也可以解码它,但在我必须替换“:”之前

  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 说,现在我想获得电压的值

  • 八进制字符串(大小(4))
  • 应该改成float格式

好的,我执行 SNMP 查询并得到结果: e6:d9:4c:41

女巫应该是12.8伏左右的电压

现在我尝试将其转换为 Float

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

并得到 -5.1308008E23

e6d94c41

那么我的代码有什么问题?

4

1 回答 1

1

这是在 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);
     }
}
于 2017-01-15T09:48:53.157 回答