побитовое и не работает с байтами в котлин

Я пытаюсь написать код 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

Ответ 1

Kolin предоставляет побитовые оператор-подобные функции инфикса, доступные только для Int и Long.

Поэтому необходимо преобразовать байты в int для выполнения побитовых операций:

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

ОБНОВЛЕНИЕ: Поскольку Kotlin 1.1 эти операции доступны непосредственно на байте.

Из bitwiseOperations.kt:

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

Ответ 2

Побитовое "и" любого байтового значения и 0xff всегда будет возвращать исходное значение.

Это легко увидеть, если вы нарисуете биты на диаграмме:

00101010   42
11111111   and 0xff
--------
00101010   gives 42