我有以下函数可以将十六进制字符串转换为字节数组。然后,我计算校验和:
private String CalcChecksum (String message) {
/**Get string's bytes*/
//byte[] bytes = DatatypeConverter.parseHexBinary(message.replaceAll("\\s","")).getBytes();
message = message.replaceAll("\\s","");
byte[] bytes = hexToByteArray(message);
byte b_checksum = 0;
for (int byte_index = 0; byte_index < bytes.length; byte_index++) {
b_checksum += bytes[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[] hexToByteArray(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;
}
进行一些测试,例如对于十六进制值“e0”,hexToByteArray
得到值“-32”。所以 CalcChecksum 中的最终返回值为“17a”。
我需要的是在hexToByteArray
函数中获取无符号值。这是因为我需要将 hexString 中的校验和发送到 MCU,其中校验和是用无符号值计算的,所以不是得到“-32”值,而是得到“224”,最终的十六进制值是“7a” “17a”。
我认为进行某种转换,例如当字节结果为负值时,请执行类似255 + "negative value" + 1
. 这会将“-32”转换为“224”。
问题是我正在尝试这样做,但是在进行字节,int等之间的转换时遇到了一些错误...
那么,我该怎么办?