KotlinでIntを16進文字列に変換する
1. 概要
このクイックチュートリアルでは、整数を対応する16進値に変換するいくつかの方法について説明します。
2. Integer.toHexString()
整数を対応する16進形式に変換する最も簡単な方法は、 Integer.toHexString(int)メソッドを使用することです。
val hex = Integer.toHexString(4001)
assertEquals("fa1", hex)
上に示したように、 toHexString()メソッドは期待どおりに16進値を生成します。 このメソッドは、内部で負の数を符号なしの値に変換することを言及する価値があります。
3. toString()拡張関数
Kotlin 1.1以降、整数に対して toString(radix:Int)拡張関数を使用して、整数を16進値に変換できます。
val number = 4001
assertEquals("fa1", number.toString(16))
上に示したように、この関数は引数として基数または基数を受け入れます。 明らかに、16進値を要求するために16を渡します。
興味深いことに、符号なし変換ではInteger.toHexString()とtoString()の間に微妙な違いがあります。より具体的には、前者は最初に整数を符号なしの同等物に変換します。 したがって、負の数の場合、それらは異なる値を返します。
val number = -100
assertNotEquals(Integer.toHexString(number), number.toString(16))
これを修正するには、 toString()を呼び出す前に、整数をunsignedlongに相当するものに変換できます。
assertEquals(Integer.toHexString(number), number.toUInt().toString(16))
上に示したように、符号なし変換にはKotlin1.3で導入された符号なし整数機能を使用しています。
または、ビット単位で演算を“ 0xffffffffL” で実行して、整数を符号なしの長い形式に変換することもできます。
val unsignedLong = number.toLong() and 0xffffffffL
assertEquals(Integer.toHexString(number), unsignedLong.toString(16))
これは、特に toUInt()がオプションとして使用できない場合に役立ちます。
4. フォーマット指定子
上記のアプローチに加えて、この変換にformat()拡張関数を使用することもできます。 これを行うには、「%x」形式指定子を使用して format()メソッドを呼び出す必要があります。
val number = 4001
assertEquals("fa1", "%x".format(number))
“ %x” 指定子は、指定された数値を16進形式に変換します。
5. 結論
このチュートリアルでは、整数を対応する16進文字列に変換するためのいくつかのアプローチを学びました。
いつものように、すべての例はGitHubでから入手できます。