如何为每个第n个字符添加两个点



我正在开发一个Android NFC应用程序。该应用程序可以扫描NFC标签(这里我有一个NXP NTAG 5增强标签,它是NFC论坛类型5标签(。

由于NFC-V标签的UID是反向的,我的目标是显示NFC标签的(重新(反向UID,其中每个字节由两个点分隔。

下面是我用来做这件事的方法。它反转UID并将其转换为十六进制,但我不知道如何插入":"每隔一个字符分隔一次。

fun byteArrayToHexInversed(bytes: ByteArray): String {
//First reverse the UID
bytes.reverse()
//Then convert byteArray to Hexa
val hexChars = CharArray(bytes.size * 2)
for (j in bytes.indices) {
val v = bytes[j].toInt() and 0xFF
hexChars[j * 2] = hexArray[v ushr 4]
hexChars[j * 2 + 1] = hexArray[v and 0x0F]
}
//Finally return the String with the separators
return hexChars.joinToString(":") { byte ->
byte.toString().padStart(2, '0')
}
}

以下是我输入的内容:

000839CB580104E0

以下是我想要的输出:

E0:04:01:58:CB:39:08:00

我不知道你有多热衷于提高效率,但这里有一种方法!

var input = "000839CB580104E0"
input.chunked(2).reversed().joinToString(":").run(::println)
>> E0:04:01:58:CB:39:08:00

它基本上是将你的输入分成一个由两个字符块组成的列表(这样它们就可以保持顺序,例如E0(,然后反转该列表(这样块本身就不会反转,但它们是按相反的顺序列出的(,剩下的你就知道了!

如果你想要更高效的索引,你可以按照相反的顺序遍历数组,成对地抓取字符


我无法让你的hexChars.joinToString { byte conversion }东西与该输入一起工作,所以我可能没有正确设置hexChars-我只是假设你可以在这里从String版本开始,例如在CharArray上调用joinToString(separator="")

如果你想直接处理数组,你可以在上面调用asIterable()

input.asIterable()
.chunked(2) { it.joinToString(separator="") }
.reversed()
.joinToString(":")
.run(::println)

但是您仍然需要在某个时刻将每对字符组合成一个字符串,这就是lambda转换所要做的。joinToString将一个转换函数带到,所以如果你喜欢,你可以在那里做它

相关内容

  • 没有找到相关文章

最新更新