Android 如何将ByteArray转换为字符串并在Kotlin中反转?

Android 如何将ByteArray转换为字符串并在Kotlin中反转?,android,arrays,string,android-studio,kotlin,Android,Arrays,String,Android Studio,Kotlin,我正在尝试将字符串转换为ByteArray,并在Kotlin中将ByteArray转换为字符串 我的程序崩溃了,所以我决定进行一点调试,令我惊讶的是,当我将字符串转换为ByteArray,并将相同的ByteArray转换为字符串时,值不一样 比如,如果我这样做: val ivEnc = "[B@9a7d34b" val dataEnc = "[B@1125ac5" passTextEncrypted.setText(ivEnc.toByteArray()

我正在尝试将字符串转换为ByteArray,并在Kotlin中将ByteArray转换为字符串

我的程序崩溃了,所以我决定进行一点调试,令我惊讶的是,当我将字符串转换为ByteArray,并将相同的ByteArray转换为字符串时,值不一样

比如,如果我这样做:

val ivEnc = "[B@9a7d34b"
val dataEnc = "[B@1125ac5"

passTextEncrypted.setText(ivEnc.toByteArray().toString())
passTextDecrypted.setText(dataEnc.toByteArray().toString())
我希望收到”[B@9a7d34b“和”[B@1125ac5“。但每次运行程序时,我都会收到不同的“随机”值(都以“[B@”)开头)


有什么地方我做错了吗?

在每个编码上,结果都会发生变化,因此如果您指定了编码,您就不会丢失任何数据,您可以使用字符集

 val s = "this is an example"
 val b = s.toByteArray(Charset.defaultCharset())
 println(b)
 val ss = String(b, Charset.defaultCharset())
 println(ss)

当您仅使用
toString()
打印出
ByteArray
时,您实际上得到的是它的对象ID(它有点复杂,但该定义现在可以使用),而不是
ByteArray
本身的内容

解决方案1

将字符集作为参数传递给
toString()

解决方案2

ByteArray
作为参数传递给
String
构造函数:

val bytes = "Hello!".toByteArray()
val string = String(bytes)

println(string) // Prints: "Hello!"

好的,现在就可以了。要将字符串转换为byteArray,我可以简单地使用
“Hello!”。toByteArray()
?是的,在这种情况下,它的工作原理是
toByteArray()
无参数假定您需要默认字符集(我认为是UTF-8)。如果您需要不同的字符集,则必须在两个位置指定它:
“Hello”.toByteArray(SomeCharSet)
字节.toString(SomeCharSet)
。但是使用默认值是安全和合理的。太好了,谢谢!我还有另一个问题,我应该在StackOverflow中创建一个新问题,还是可以在这里提问?好的,这很有效。^^但是当我打印它时,它们的字符串就像随机符号或ROM总线中的字符串。这会影响转换吗?我的意思是,这会改变字节的值吗阵列?
val bytes = "Hello!".toByteArray()
val string = String(bytes)

println(string) // Prints: "Hello!"