我不知道是否有人已经回答了这个问题。如果是这种情况,请进行补偿。
我想将此函数转换为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));
}
答案 0 :(得分:4)
我建议为此使用扩展功能:
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)
答案 1 :(得分:2)
如果您只需要一个十六进制字符串表示形式(这也是我从您的评论中得到的内容),那么您可能只想使用以下内容:
fun StringBuffer.appendHex(b : Byte) = append("%02X".format(b))
用法与Lino所显示的相同:
StringBuffer()
.append("some text")
.appendHex(someByte)
或者如果您需要保留当前签名:
companion object {
@JvmStatic
fun appendHex(s : StringBuffer, b : Byte) {
s.append("%02X".format(b))
}
}
答案 2 :(得分:1)
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
原因。
不,我真的不知道为什么不会在 byte 上定义按位运算符。