我有一个函数,我得到一个带符号的十进制值并将其转换为十六进制值。使用这个十六进制值和其他十六进制值,我创建了一个十六进制字符串,我需要计算校验和:
但是我可能有问题,因为我在 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;
}
我认为具有负十六进制值可能与此问题有关。