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