0

我需要向 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);
}
4

1 回答 1

1

使用数组int来存储八位字节值,而不是数组bytebyte已签名,范围为 -128 到 +127,因此在这里不起作用,您需要将值变为 255。

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

于 2013-05-29T21:30:26.660 回答