我需要向SNMP代理发送一个8字节的字符串,但它收到了错误的值

时间:2013-05-29 20:25:24

标签: java snmp

我需要向SNMP代理发送一个8字节的字符串。

我的号码可以是一个大整数作为字符串。 由于java对有符号字节的限制,我遇到了一些问题。

例如,如果num为“555”,则SNMP代理会收到正确的值。 如果num为“666”,则SNMP代理接收到错误的值,因为,其中一个字节 数组有一个-ve值。

我做了一点&使用0xFF,仍然无法正常工作。 我怎样才能解决这个问题?谢谢你的帮助!

 public static String stringNumToOctetString(String num) {
    BigInteger bi = new BigInteger(num);
    byte[] b = bi.toByteArray();

    int n = 8 - b.length;
    byte[] bVal = new byte[8]; //return must be 8 bytes
    for(int i=0; i<8; i++) {
        bVal[i] = (byte) 0;
    }
    int k = 0;
    for(int j=n; j<8; j++) {
        bVal[j] = (byte) (b[k++] & 0xFF);
    }
    return new String(bVal);
}

1 个答案:

答案 0 :(得分:1)

使用int数组来存储八位位组值,而不是byte数组。 byte已签名,范围为-128到+127,因此无法在此处运行,您需要将值设置为255.

进一步阅读
http://www.jguru.com/faq/view.jsp?EID=13647