07-20-2023, 06:32 AM
Imagine I have a Kotlin program with a variable `b` of type `Byte`, into which an external system writes values greater than `127`. "External" means that I cannot change the type of the value it returns.
```val a:Int = 128
val b:Byte = a.toByte()```
Both `a.toByte()` and `b.toInt()` return `-128`.
Imagine I want to get the correct value (`128`) from the variable `b`. How can I do it?
In other words: What implementation of `magicallyExtractRightValue` would make the following test run?
@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©.isEqualTo(128)
}
private fun magicallyExtractRightValue(b: Byte): Int {
throw UnsupportedOperationException("not implemented")
}
**Update 1:** This solution suggested by [Thilo](
private fun magicallyExtractRightValue(o: Byte): Int = when {
(o.toInt() < 0) -> 255 + o.toInt() + 1
else -> o.toInt()
}
```val a:Int = 128
val b:Byte = a.toByte()```
Both `a.toByte()` and `b.toInt()` return `-128`.
Imagine I want to get the correct value (`128`) from the variable `b`. How can I do it?
In other words: What implementation of `magicallyExtractRightValue` would make the following test run?
@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©.isEqualTo(128)
}
private fun magicallyExtractRightValue(b: Byte): Int {
throw UnsupportedOperationException("not implemented")
}
**Update 1:** This solution suggested by [Thilo](
[To see links please register here]
) seems to work.private fun magicallyExtractRightValue(o: Byte): Int = when {
(o.toInt() < 0) -> 255 + o.toInt() + 1
else -> o.toInt()
}