如果对Kotlin的答案为https://stackoverflow.com/a/5402769/2735398
,我想转换代码我把它粘贴到Intellij:
private int decodeInt() {
return ((bytes[pos++] & 0xFF) << 24) | ((bytes[pos++] & 0xFF) << 16)
| ((bytes[pos++] & 0xFF) << 8) | (bytes[pos++] & 0xFF);
}
Intellij问我是否要将其转换为Kotlin,当我这样做是输出:
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))
}
完全0xFF
我收到此错误:
The integer literal does not conform to the expected type Byte
通过在其后添加.toByte()
,我可以删除此错误。
在所有轮班离开操作(shl
)时,我收到此错误:
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
我无法解决这个问题...... 我不太了解Java / Kotlin中的位移...... Kotlin的代码是什么?
答案 0 :(得分:5)
明确转换如下:0xFF.toByte()
作为一般规则,当您需要有关错误或可能的解决方案的更多信息时,请按Alt + Enter。
左移方法采用Int作为参数。所以,同样的事情,转换为正确的类型。
(bytes[pos++] and 0xFF.toByte()).toInt() shl 24
答案 1 :(得分:1)
shl期望Int,而不是Byte。你需要0xFF作为Int(它是),所以不要调用toByte()
。你需要(0xFF shl 24)
成为一个Int,所以不要转换它。你需要bytes[pos++]
成为Int ..转换它!
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))