Ce face String.encodeToByteArray
Calculatorul salvează textul ca o secvență de octeți. encodeToByteArray() returnează acești octeți în codificarea UTF-8. În UTF-8, literele englezești ocupă un octet, iar literele românești cu diacritice (ă, ș, ț) ocupă doi, așa că numărul de octeți poate fi mai mare decât length.
toByteArray() face același lucru pe JVM, dar acceptă și alt Charset (de exemplu Charsets.ISO_8859_1). Înapoi, din octeți în text, mergi cu decodeToString() sau String(octeti, charset).
Parametri
| Parametru | Descriere |
|---|---|
charset |
Pentru toByteArray: codificarea folosită. Implicit UTF-8. |
Ce returnează
Un ByteArray.
Exemple
Exemplul 1: Caractere și octeți
„Iasi” are 4 caractere și 4 octeți. „Iași” are tot 4 caractere, dar 5 octeți, pentru că ș ocupă doi.
fun main() {
for (t in listOf("Iasi", "Iași", "țară")) {
println("$t: ${t.length} caractere, ${t.encodeToByteArray().size} octeți")
}
}
Rezultat
Iasi: 4 caractere, 4 octeți
Iași: 4 caractere, 5 octeți
țară: 4 caractere, 6 octeți
Exemplul 2: Valorile octeților și decodarea
Octeții sunt numere între -128 și 127. Cu decodeToString() obținem textul înapoi.
fun main() {
val octeti = "Aș".encodeToByteArray()
println(octeti.contentToString())
println(octeti.decodeToString())
}
Rezultat
[65, -56, -103]
Aș
Exemplul 3: Hash SHA-256 pentru un text
Funcțiile de hash din Java lucrează cu octeți, de aceea transformăm textul cu toByteArray().
import java.security.MessageDigest
fun main() {
val parola = "soare2024"
val hash = MessageDigest.getInstance("SHA-256").digest(parola.toByteArray())
println(hash.size)
println(hash.joinToString("") { "%02x".format(it) }.take(16) + "...")
}
Rezultat
32
ae9bc78f5b8cfe51...
Greșeli frecvente
- Presupui că numărul de octeți este egal cu
length. Cu diacritice nu este; verificăencodeToByteArray().sizecând contează dimensiunea. - Decodezi octeții cu altă codificare decât cea folosită la salvare și diacriticele apar stricate (de exemplu „È™” în loc de „ș”).
Comenzi înrudite
File.readBytes: readBytes citește un fișier ca șir de octeți (ByteArray); writeBytes scrie octeți, pentru imagini, arhive sau date binare.String.toCharArray: Copiază caracterele textului într-un CharArray, un tablou care, spre deosebire de String, poate fi modificat.Char.digitToInt: digitToInt transformă caracterul ‘7’ în numărul 7; code dă codul Unicode al caracterului (‘A’.code este 65).