Search code examples
kotlinbit-shift

Kotlin bit shifting


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?


Solution

  • 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