La conversión de Java a nivel de bits "y" operador a Kotlin

Nadal:

Tengo una una matriz de bytes que estoy calcular una suma de comprobación para en Java. Y yo estoy tratando de convertirlo en Kotlin. Pero el problema es que estoy recibiendo valores diferentes para el cálculo del -128 & 0xffen Java que es equivalente en Kotlin. Al pasar en el -128, cuando hago el cálculo en Java, me da un resultado positivo de 128, pero cuando lo ejecuto en Kotlin, me da una -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;
    }
}

Este es mi código Kotlin. Voy a llamar a la clase bytes para ver el "conjunto de bytes" Estoy trabajando con. Por lo que ambas piezas se están ejecutando en la misma entrada.

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()))
}

El código Java es una base de código heredado que utiliza I2C a enviar a través de estos bytes a un microcontrolador. Es la de Java simplemente incorrecto? ¿O hay una manera que puedo conseguir el 128 en el código Kotlin?

Harold:

Volviendo a Bytelos medios que la función no puede devolver 128 no importa qué, por lo que debe ser Int. La suma de comprobación de Java hace una suma "completo", no sólo el byte más bajo de la suma. Del mismo modo el nivel de bits y no puede ser realizado en bytes, que es inútil, la extensión de signo (la Y con 0xFF es eliminar los bits de signo extendidos) se siguen sucediendo. Entonces podría ser escrito como un bucle, el estilo de Java, pero en Kotlin es probable que tenga más sentido para escribir algo como esto:

fun getKotlinChecksum(array: ByteArray): Int {
    return array.map({ it.toInt() and 0xFF }).sum()
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=189578&siteId=1
Recomendado
Clasificación