android StringIndexOutOfBoundsException

时间:2013-08-06 11:42:04

标签: android string hex

我有一个函数,我得到一个带符号的十进制值,并将其转换为十六进制值。使用此十六进制值,我创建一个十六进制字符串,我需要计算校验和:

但是我可能有些错误,因为我在Logcat中收到了下一条消息:

java.lang.StringIndexOutOfBoundsException: length=19, index=19 at hexStringToByteArray.

初看起来,似乎问题应该在于消息长度应该是最大值15,但我现在不知道为什么会这样,因为消息长度为9byte。

这是代码:

savedProgress = (value between 0 and 100)

int_value = ((savedProgress * 20480) / 100) * -1;
hex_value = Integer.toString(int_value, 16);

String message_part = send_command(05)+num_byte_thread(07)+num_byte_variable(02)+pos_reg_hex1(5af2ff1f)+hex_value1(-2733 for example);



private String CalcChecksum (String message) {

    /**Get string's bytes*/
    byte[] byte_calc = hexStringToByteArray(message);
    byte b_checksum = 0;

    for (int byte_index = 0; byte_index < byte_calc.length; byte_index++) {
        b_checksum += byte_calc[byte_index];
    }

    int d_checksum = b_checksum;  //Convert byte to int(2 byte)
    int c2_checksum = 256 - d_checksum;  //Hacer complemento a 2
    String hexString = Integer.toHexString(c2_checksum);  //Convertir el entero (decimal) a hexadecimal

    return hexString;
}

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

我认为具有负十六进制值可能与此问题有关。

0 个答案:

没有答案