按位&在kotlin中不使用字节

时间:2015-10-29 10:18:03

标签: bit-manipulation kotlin

我试图写下像kotlin这样的代码:

for (byte b : hash)  
     stringBuilder.append(String.format("%02x", b&0xff));

但我与"&"无关。我试图使用" b和0xff"但它不起作用。按位"和"似乎在Int上工作,而不是字节。

java.lang.String.format("%02x", (b and 0xff))

可以使用

1 and 0xff

2 个答案:

答案 0 :(得分:27)

Kolin仅为IntLong提供类似运算符的infix functions

因此有必要将字节转换为int来执行按位操作:

val b : Byte = 127
val res = (b.toInt() and 0x0f).toByte() // evaluates to 15

<强>更新 从Kotlin 1.1开始,这些操作可直接在Byte上使用。

来自 bitwiseOperations.kt

@SinceKotlin("1.1") 
public inline infix fun Byte.and(other: Byte): Byte = (this.toInt() and other.toInt()).toByte()

答案 1 :(得分:5)

任何字节值和0xff的按位“和”将始终返回原始值。

如果您在图中绘制位,很容易看到这一点:

IMG_LoadTexture