mirror of
https://github.com/d4rken-org/capod.git
synced 2026-09-14 18:26:11 -04:00
This commit introduces a new helper function `fromHex()` that converts a HEX string (with optional separators like spaces or hyphens) into a byte array. It also adds a corresponding `toHex()` function for converting a byte array to a HEX string. These helpers are now used in various parts of the codebase, including: - Fake BLE data generation - AirPod key input dialog - RPA checker tests - BaseAirPodsTest Additionally, a unit test for these conversion functions has been added.
30 lines
1.2 KiB
Kotlin
30 lines
1.2 KiB
Kotlin
package eu.darken.capod.common
|
|
|
|
import java.util.BitSet
|
|
|
|
fun Byte.toHex(): String = String.format("%02X", this)
|
|
fun UByte.toHex(): String = this.toByte().toHex()
|
|
|
|
val Byte.upperNibble get() = (this.toInt() shr 4 and 0b1111).toShort()
|
|
val Byte.lowerNibble get() = (this.toInt() and 0b1111).toShort()
|
|
val UByte.upperNibble get() = (this.toInt() shr 4 and 0b1111).toUShort()
|
|
val UByte.lowerNibble get() = (this.toInt() and 0b1111).toUShort()
|
|
|
|
fun Byte.isBitSet(pos: Int): Boolean = BitSet.valueOf(arrayOf(this).toByteArray()).get(pos)
|
|
fun UByte.isBitSet(pos: Int): Boolean = this.toByte().isBitSet(pos)
|
|
|
|
fun Short.isBitSet(pos: Int): Boolean = this.toByte().isBitSet(pos)
|
|
fun UShort.isBitSet(pos: Int): Boolean = this.toShort().isBitSet(pos)
|
|
|
|
fun UShort.toBinaryString(): String = Integer.toBinaryString(this.toInt()).padStart(4, '0')
|
|
fun UByte.toBinaryString(): String = Integer.toBinaryString(this.toInt()).padStart(8, '0')
|
|
|
|
|
|
fun ByteArray.toHex(separator: String = "-"): String = joinToString(separator) { "%02X".format(it) }
|
|
fun String.fromHex(): ByteArray = this
|
|
.replace(" ", "")
|
|
.replace("-", "")
|
|
.also { require(it.length % 2 == 0) { "Not a HEX string, length: ${it.length}" } }
|
|
.chunked(2).map { it.toInt(16).toByte() }
|
|
.toByteArray()
|