У меня есть массив байтов, для которых я вычисляю контрольную сумму в Java. И я пытаюсь преобразовать это в Kotlin. Но проблема в том, что при вычислении -128 & 0xff
в Java я получаю другие значения, чем в Kotlin. При прохождении в -128, когда я делаю вычисления в Java, это дает мне положительные 128, но когда я запускаю его в Kotlin, это дает мне -128.
public class Bytes {
public static byte[] getByteArray() {
return new byte [] {-128};
}
public static int getJavaChecksum() {
int checksum = 0;
for (Byte b : getByteArray()) {
checksum += (b & 0xff);
}
return checksum;
}
}
Это мой код Котлин. Я вызываю вышеуказанный байтовый класс, чтобы получить «байтовый массив», с которым я работаю. Таким образом, обе части работают на одном входе.
fun getKotlinChecksum(array: ByteArray): Byte {
var checksum = 0
for (b in array) {
checksum += (b and 0xFF.toByte())
}
return checksum.toByte()
}
fun main(args: Array<String>) {
println(Bytes.getJavaChecksum())
print(getKotlinChecksum(Bytes.getByteArray()))
}
Java-код взят из устаревшей кодовой базы, которая использует I2C для отправки этих байтов в микроконтроллер. Ява просто не так? Или есть способ, которым я могу получить 128 в коде Kotlin?