gpt4 book ai didi

java - kotlin 中字节的右移运算符

转载 作者:行者123 更新时间:2023-12-01 13:02:50 25 4
gpt4 key购买 nike

我在java中有下一个代码:

private final static char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
public static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = HEX_ARRAY[v >>> 4];
hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
}

return new String(hexChars);
}

我想将此代码转换为 kotlin。自动转换给出了下一个结果:
fun bytesToHex(bytes: ByteArray): String {
val hexChars = CharArray(bytes.size * 2)
for (j in bytes.indices) {
val v = bytes[j] and 0xFF
hexChars[j * 2] = HEX_ARRAY[v.ushr(4)]
hexChars[j * 2 + 1] = HEX_ARRAY[v and 0x0F]
}

return String(hexChars)
}

但是在 kotlin 中没有用于 Byte 类型的函数 ushr 。我试过将 v 转换为 Int 并移动这个值并将其再次转换为 Byte ,如 (v.toInt().ushr(4) as Byte).toInt() 。但它给出了错误的结果。将此函数转换为 kotlin.dll 的正确方法是什么?

最佳答案

您可以将 bytes[j] 转换为 integer,然后代码工作:

private val HEX_ARRAY = "0123456789ABCDEF".toCharArray()

fun bytesToHex(bytes: ByteArray): String {
val hexChars = CharArray(bytes.size * 2)
for (j in bytes.indices) {
val v = bytes[j].toInt() and 0xFF // Here is the conversion
hexChars[j * 2] = HEX_ARRAY[v.ushr(4)]
hexChars[j * 2 + 1] = HEX_ARRAY[v and 0x0F]
}

return String(hexChars)
}

fun main(args: Array<String>) {
val s = "hello_world"
println(bytesToHex(s.toByteArray(Charset.forName("UTF-8"))))
}

如果你运行它,你会在控制台上看到:
68656C6C6F5F776F726C64

关于java - kotlin 中字节的右移运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49985826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com