我正在尝试将字符串转换为ByteArray,并将ByteArray转换为Kotlin中的字符串。
我的程序崩溃了,所以我决定调试一下,我的惊讶之处是,当我将一个字符串转换为一个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@”开头)。
我做错什么了吗?
发布于 2021-03-13 16:46:40
当您只使用ByteArray
打印一个toString()
时,您实际上得到的是它的对象ID (它稍微复杂一些,但这个定义目前是可行的),而不是ByteArray
本身的内容。
解决方案1
将字符集作为参数传递给toString()
val bytes = "Hello!".toByteArray()
val string = bytes.toString(Charset.defaultCharset())
println(string) // Prints: "Hello!"
解决方案2
将ByteArray
作为参数传递给String
构造函数:
val bytes = "Hello!".toByteArray()
val string = String(bytes)
println(string) // Prints: "Hello!"
发布于 2021-03-13 16:46:20
在每次编码时,结果都会发生变化,因此如果指定编码,就不会丢失任何数据,可以使用Charset来实现这一点。
val s = "this is an example"
val b = s.toByteArray(Charset.defaultCharset())
println(b)
val ss = String(b, Charset.defaultCharset())
println(ss)
https://stackoverflow.com/questions/66616006
复制相似问题