побитовое и не работает с байтами в котлин
Я пытаюсь написать код 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