にバイトでは動作しません。私は "bと0xff"を使用しようとしていますが、動作しません。ビットごとの "and"はバイトではなくIntで動作するようです。ビット単位&は私のようなkotlinコードを書くしようとしているkotlin
java.lang.String.format("%02x", (b and 0xff))
それは常に元の値を返します
1 and 0xff
にバイトでは動作しません。私は "bと0xff"を使用しようとしていますが、動作しません。ビットごとの "and"はバイトではなくIntで動作するようです。ビット単位&は私のようなkotlinコードを書くしようとしているkotlin
java.lang.String.format("%02x", (b and 0xff))
それは常に元の値を返します
1 and 0xff
コリンはInt
とLong
ために利用可能なビット演算子のようなinfix functionsを提供します。
だから、ビット単位のオペレーションを実行するためにint型にバイトを変換する必要があります:
val b : Byte = 127
val res = (b.toInt() and 0x0f).toByte() // evaluates to 15
UPDATE: Kotlin 1.1以降、これらの操作は、直接バイトで利用可能です。 bitwiseOperations.ktから
:
@SinceKotlin("1.1")
public inline infix fun Byte.and(other: Byte): Byte = (this.toInt() and other.toInt()).toByte()
javaもこの変換を拡大していることに注意すると便利です。それは単に暗黙のことです。 – Raman
ビット単位「と」任意のバイト値から0xffの使用しても大丈夫です。
あなたが図のビットを描く場合は、これを見るために簡単です:
00101010 42
11111111 and 0xff
--------
00101010 gives 42
の前にそのような構文を見たことがありませんが、なぜそれほど多くの人々がバイトをintに変換するために使用するのですか? –
いいえ、それはバイトに収まるように 'int'を切り詰めるために使われます。 – ams
Javaの@AllenVorkバイトは* signed *であり、ビット操作(Kotlinは単にこれを明示的に要求する必要がある)を行うとき、javaはそれらを暗黙的に 'int'に変換します。したがって、最初のバイト値が負の場合にこの拡大変換が期待される正のint値になるようにするには、拡張されたint値(符号ビットを含む)の3つの上位バイトを '&0xff ' 。 – Raman
あなたはあなたのコードが何をするのか説明していただけますか?私は – voddan