想象一下,我有一個類型爲Byte
的變量b
的Kotlin程序,其中外部系統寫入的值大於127
。 「外部」意味着我無法更改它返回的值的類型。如何正確處理Kotlin中大於127的字節值?
val a:Int = 128 val b:Byte = a.toByte()
兩個a.toByte()
和b.toInt()
回報-128
。
想象一下,我想從變量b
得到正確的值(128
)。我該怎麼做?
換句話說:magicallyExtractRightValue
的什麼實現會使下面的測試運行?
@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")
}
更新1:該解決方案Thilo建議似乎工作。
private fun magicallyExtractRightValue(o: Byte): Int = when {
(o.toInt() < 0) -> 255 + o.toInt() + 1
else -> o.toInt()
}
'byte'在簽署Java,所以你會有與此生活在一起。爲什麼你必須使用'byte'? 'int'從哪裏來? – Thilo
我有一個外部庫,我不想更改。它給了我字節類型的值,其中包含負數。 –
所以圖書館已經給你「-127」。你爲什麼需要轉換它?除非您使用數字,否則它沒有區別。如果你確定這個庫真的「意味着」128,你可以在結尾處使用'short'或'int'(通過255 + b轉換爲負數)。 – Thilo