gpt4 book ai didi

java - 将右移(Java 的 >>)转换为 Kotlin

转载 作者:行者123 更新时间:2023-12-01 19:27:11 26 4
gpt4 key购买 nike

我想将 java 代码转换为 Kotlin:

private static void appendHex(StringBuffer sb, byte b) {
sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));
}

我得到:

private fun appendHex(sb: StringBuffer, b: Byte) {
sb.append(hex.toCharArray()[b shr 4 and 0x0f]).append(hex.toCharArray()[b and 0x0f])
}

但是 Kotlin 的标准 shr​​ 期望 Int 作为第一个参数(而不是 Byte)。 and 运算符也存在同样的问题。

如何将其转换为 Kotlin?

最佳答案

按位运算如and , or ,和shl仅为 Int 定义和Long在 Kotlin 中。 (https://kotlinlang.org/docs/reference/basic-types.html)

只需创建 extension functions需要 Byte值。

private fun appendHex(sb: StringBuffer, b: Byte) {
sb.append(hex.toCharArray()[b shr 4 and 0x0f]).append(hex.toCharArray()[b and 0x0f])
}

infix fun Byte.shl(that: Int): Int = this.toInt().shl(that)
infix fun Int.shl(that: Byte): Int = this.shl(that.toInt()) // Not necessary in this case because no there's (Int shl Byte)
infix fun Byte.shl(that: Byte): Int = this.toInt().shl(that.toInt()) // Not necessary in this case because no there's (Byte shl Byte)

infix fun Byte.and(that: Int): Int = this.toInt().and(that)
infix fun Int.and(that: Byte): Int = this.and(that.toInt()) // Not necessary in this case because no there's (Int and Byte)
infix fun Byte.and(that: Byte): Int = this.toInt().and(that.toInt()) // Not necessary in this case because no there's (Byte and Byte)

我用过infix使用 1 shl 2 等操作(与 1.shl(2) 相反)。 (https://kotlinlang.org/docs/reference/functions.html)

<小时/>

或者简单地添加 .toInt()对于每个使用 shl 的表达式或and .

private fun appendHex(sb: StringBuffer, b: Byte) {
sb.append(hex.toCharArray()[b.toInt() shr 4 and 0x0f]).append(hex.toCharArray()[b.toInt() and 0x0f])
}

<小时/>注意:在 Java 中, <<具有比 & 更高的运算符优先级。在 Kotlin 中, shland具有相同的运算符优先级,因为它们都是中缀 函数

关于java - 将右移(Java 的 >>)转换为 Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49208330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com