I want to convert the code if this answer to Kotlin: https://stackoverflow.com/a/5402769/2735398
I pasted this into Intellij:
private int decodeInt() {
return ((bytes[pos++] & 0xFF) << 24) | ((bytes[pos++] & 0xFF) << 16)
| ((bytes[pos++] & 0xFF) << 8) | (bytes[pos++] & 0xFF);
}
Intellij asks if I want to convert it to Kotlin, when I do this is the output:
private fun decodeInt(): Int {
return (bytes[pos++] and 0xFF shl 24 or (bytes[pos++] and 0xFF shl 16)
or (bytes[pos++] and 0xFF shl 8) or (bytes[pos++] and 0xFF))
}
At all 0xFF I get this error:
The integer literal does not conform to the expected type Byte
By appending .toByte() after it I was able to remove this error.
And at all shift left operations(shl) I get this error:
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
@SinceKotlin @InlineOnly public infix inline fun BigInteger.shl(n: Int): BigInteger defined in kotlin
I wasn't able to solve this one...
I don't know a lot about bit shifting in Java/Kotlin...
What would be the working Kotlin code for this?
Convert explicitly like this: 0xFF.toByte()
As a general rule, press Alt+Enter when you need more information about an error or a possible solution.
The shift left method takes an Int as parameter. So, same thing, convert to the right type.
(bytes[pos++] and 0xFF.toByte()).toInt() shl 24
shl expects Int, not Byte. You need 0xFF to be an Int (which it is), so don't call toByte(). You need (0xFF shl 24) to be an Int, so don't convert that. You need bytes[pos++] to be an Int.. convert that!
return (((bytes[pos++].toInt() and (0xFF shl 24)) or
(bytes[pos++].toInt() and (0xFF shl 16)) or
(bytes[pos++].toInt() and (0xFF shl 8)) or
(bytes[pos++].toInt() and 0xFF))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With