Как конвертировать Java в Kotlin - PullRequest
1 голос
/ 21 марта 2019

Не знаю, ответил ли кто-нибудь на этот вопрос.Если дело обстоит так, тогда, пожалуйста, для избыточности.

Я хотел бы преобразовать эту функцию в функцию Kotlin.Спасибо за помощь.

private final static String HEX = "XXXXXXXXX";
private static void appendHex(StringBuffer sb, byte b) {
    sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
}

Ответы [ 3 ]

4 голосов
/ 21 марта 2019

Я предлагаю использовать для этого функцию расширения:

private const val HEX = "XXXXXXXXX"
fun StringBuffer.appendHex(b: Byte): StringBuffer {
    val i = b.toInt()
    append(HEX[i shr 4 and 0x0f])
    append(HEX[i and 0x0f])
    return this
}

Я также сделал функцию, возвращающую this снова, чтобы вы могли даже вызывать ее в цепочке:

myStringBuffer
   .append(someThing)
   .appendHex(myByte)
   .append(someThingElse)
2 голосов
/ 21 марта 2019

Если вам нужно только шестнадцатеричное представление строки (и это также то, что я получаю из вашего комментария), вы можете просто использовать вместо этого следующее:

fun StringBuffer.appendHex(b : Byte) = append("%02X".format(b))

Использование в таком случае такжеЛино показал:

StringBuffer()
    .append("some text")
    .appendHex(someByte)

или, если вам нужно сохранить свою текущую подпись:

companion object {
  @JvmStatic
  fun appendHex(s : StringBuffer, b : Byte) {
    s.append("%02X".format(b))
  }
}
1 голос
/ 21 марта 2019
companion object {
    private const val HEX = "XXXXXXXXX"

    @JvmStatic
    private fun appendHex(sb: StringBuffer, b: Int) {
        sb.append(HEX[b shr 4 and 0x0f]).append(HEX[b and 0x0f])
    }
}

Обратите внимание, что мне пришлось изменить Byte на Int, потому что Byte, похоже, не определило shr и and по неизвестной причине.

Нет, я действительно не знаю, почему побитовые операторы не будут определены для байтов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...