Typecast String для ByteArray в котлине - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть переменная в формате String в kotlin:

var a ="[B@53c1c428"

Я хочу изменить его тип данных со String на ByteArray, то есть тип, приведенный к ByteArray, примерно так:

var b: ByteArray = a

Я тоже пробовал:

var b = a as ByteArray, но это исключение

Если я это сделаю:

var b = a.toByteArray(), я получаю вывод как:

[B@3aea9e4

Но я хочу [B@53c1c428 как ByteArray.

Есть предложения?

1 Ответ

0 голосов
/ 16 сентября 2018

Просто для пояснения: [B@53c1c428 - это шестнадцатеричный хеш-код этого объекта с префиксом B[@.Сама строка "[B@53c1c428" не содержит данных, необходимых для восстановления ByteArray.


. Учтите это:

val str = "Test"
val byteArray = str.toByteArray()
println(Integer.toHexString(byteArray.hashCode())) // 1f32e575
println(byteArray) // [B@ + hash code as hexadecimal representation

val str2 = "This is a really long text and no 8 digit hex number in this world could encode it."
val byteArray2 = str2.toByteArray()
println(Integer.toHexString(byteArray2.hashCode())) // 279f2327
println(byteArray2) // [B@ + hash code as hexadecimal representation

toByteArray() уже дает вамByteArray.Если вы хотите напечатать однозначные числа как целые числа, сделайте это следующим образом:

val str = "Test"
println(str.toByteArray().joinToString(" "){ "$it" })

Вывод:

84 101 115 116

Этот выводбудет достаточно, чтобы полностью восстановить ByteArray, потому что он содержит всю необходимую информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...