【问题标题】:How can I convert a ByteArray into an String and reverse in Kotlin?如何将 ByteArray 转换为字符串并在 Kotlin 中反转?
【发布时间】:2021-06-11 10:07:18
【问题描述】:

我正在尝试将 String 转换为 ByteArray,并在 Kotlin 中将 ByteArray 转换为 String。

我的程序崩溃了,所以我决定调试一下,令我惊讶的是,当我将 String 转换为 ByteArray 并将相同的 ByteArray 转换为 String 时,值不一样。

如果我这样做:

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

passTextEncrypted.setText(ivEnc.toByteArray().toString())
passTextDecrypted.setText(dataEnc.toByteArray().toString())

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

是不是我做错了什么?

【问题讨论】:

    标签: android arrays string android-studio kotlin


    【解决方案1】:

    当您仅使用 toString() 打印出 ByteArray 时,您实际上是在获取它的对象 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!"
    

    【讨论】:

    • 好的,现在可以了。对于将字符串转换为 byteArray,我可以简单地使用 "Hello!".toByteArray()?
    • 是的,在这种情况下,toByteArray() 不带参数假设您需要默认字符集(我认为是 UTF-8)。如果你想要一个不同的字符集,你必须在两个地方都指定它:"Hello".toByteArray(SomeCharSet)bytes.toString(SomeCharSet)。但是使用默认值是安全和明智的。
    • 完美,谢谢!我对此还有一个问题,我应该在 StackOverflow 中创建一个新问题还是可以在这里提问?
    • 好的,这工作。 ^^ 但是当我打印它时,它们的字符串就像随机符号或?在一个rombus里面。这会影响转换吗?我的意思是,这可以改变 byteArray 的值吗?
    【解决方案2】:

    在每次编码时,结果都会发生变化,因此如果您指定编码不会丢失任何数据,您可以使用 Charset

    来做到这一点
     val s = "this is an example"
     val b = s.toByteArray(Charset.defaultCharset())
     println(b)
     val ss = String(b, Charset.defaultCharset())
     println(ss)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 2018-09-03
      • 2016-06-04
      • 1970-01-01
      相关资源
      最近更新 更多