1

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

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

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

乍一看,问题似乎应该在于消息长度应该是最大 15,但我现在不知道为什么会得到这个,因为消息是 9 字节长。

这是代码:

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

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

4

0 回答 0