Java-SNMP-将八进制字符串转换为浮点
目前,我正在使用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:00:00:00:00:00 标记为Unicode,我也可以对其进行解码,但在我必须替换“:” 用这种方法Java-SNMP-将八进制字符串转换为浮点,java,snmp,octetstring,Java,Snmp,Octetstring,目前,我正在使用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:00:00:00:00:00 标记为Unicode,我也可以对其进行解码,但在我必须替换“:” 用这种方法 static String hex2AscII(String hex) {
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();
}
得到
-5.1308008E23
e6d94c41
那么,我的代码有什么问题吗?以下是在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);
}
}
导入java.nio.ByteBuffer;
导入java.nio.ByteOrder;
公共类SnmpUtil{
公共静态字节[]hexStringToByteArray(字符串s){
int len=s.length();
字节[]数据=新字节[len/2];
对于(int i=0;i System.out.println("################# TestSection ################# ");
int hex = 0xE6D94C41;
f = Float.intBitsToFloat(hex);
System.out.println(f);
System.out.printf("%f", f);
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);
}
}