Wie richtig zu verarbeiten Byte-Werte, die größer als 127 in Kotlin?

Vorstellen, ich habe eine Kotlin-Programm mit einer Variablen b Typ Byte, in die das externe system schreibt die Werte, die größer als 127. "External" bedeutet, dass ich nicht ändern kann die Art der Wert, den es gibt.

val a:Int = 128
val b:Byte = a.toByte()

Beide a.toByte() und b.toInt() zurück -128.

Vorstellen, ich will den richtigen Wert (128) aus der variable b. Wie kann ich es tun?

In anderen Worten: Was die Umsetzung der magicallyExtractRightValue würde, machen Sie den folgenden test ausführen?

@Test
fun testByteConversion() {
    val a:Int = 128
    val b:Byte = a.toByte()

    System.out.println(a.toByte())
    System.out.println(b.toInt())

    val c:Int = magicallyExtractRightValue(b)

    Assertions.assertThat(c).isEqualTo(128)
}

private fun magicallyExtractRightValue(b: Byte): Int {
    throw UnsupportedOperationException("not implemented")
}

Update 1: Diese Lösung vorgeschlagen, die von Thilo scheint zu funktionieren.

private fun magicallyExtractRightValue(o: Byte): Int = when {
    (o.toInt() < 0) -> 255 + o.toInt() + 1
    else -> o.toInt()
}
  • byte ist unterzeichnet in Java, so haben Sie, um live mit dabei. Warum haben Sie verwenden, um eine byte? Wo ist der int aus?
  • Ich habe eine externe library, die ich nicht ändern wollen. Es gibt mir die byte-Werte eingegeben, mit negativen zahlen.
  • so ist die Bibliothek schon gibt Sie "-127". Warum müssen Sie es zu konvertieren? Es nicht einen Unterschied machen, wenn Sie es verwenden, numerisch. Wenn Sie sicher sind, dass die Bibliothek wirklich "gemeint" 128 stattdessen könnte man verwenden short oder int Ihr am Ende der Dinge (konvertieren-by-doing-255 + b für negative zahlen).
  • Ich brauche den tatsächlichen numerischen Wert, weil in einem anderen third-party-Bibliothek, der numerische Wert wird als index in einem array.
  • Array-Indizes sind int. Sie können konvertieren von Ihrem "unsigned byte" by doing int x = b < 0 ? 255 + b : b;
  • stackoverflow.com/questions/4266756/...
  • Danke. Wenn Sie uns Ihren Kommentar als eine Antwort, ich werde es akzeptieren. Siehe auch mein update 1.
  • Ich konnte ihn nicht finden, bevor, aber hier ist eine Frage im Zusammenhang: stackoverflow.com/q/2640946/3255152.

InformationsquelleAutor DP_ | 2016-07-29
Schreibe einen Kommentar