Функция hex.Encode
Функция hex.Encode преобразует переданный срез байтов
в шестнадцатеричную строку. Первым параметром она принимает
срез байтов dst, в который будет записан результат,
а вторым параметром — исходный срез байтов src.
Функция возвращает количество записанных байтов.
Важно, чтобы целевой срез был достаточно большим,
иначе произойдет паника. Для простого получения строки
удобнее использовать функцию hex.EncodeToString.
Синтаксис
hex.Encode(dst, src)
Пример
Давайте закодируем срез байтов []byte{0xDE, 0xAD, 0xBE, 0xEF}
в шестнадцатеричную строку с помощью функции hex.Encode:
package main
import (
"encoding/hex"
"fmt"
)
func main() {
src := []byte{0xDE, 0xAD, 0xBE, 0xEF}
dst := make([]byte, hex.EncodedLen(len(src)))
hex.Encode(dst, src)
fmt.Println(string(dst))
}
Результат выполнения кода:
"deadbeef"
Пример
Давайте закодируем строку "Hello, World!"
в шестнадцатеричное представление:
package main
import (
"encoding/hex"
"fmt"
)
func main() {
src := []byte("Hello, World!")
dst := make([]byte, hex.EncodedLen(len(src)))
hex.Encode(dst, src)
fmt.Println(string(dst))
}
Результат выполнения кода:
"48656c6c6f2c20576f726c6421"
Пример
Давайте рассмотрим случай, когда целевой срез имеет недостаточную длину.
Это приведет к панике, поэтому всегда следует выделять правильный размер
с помощью функции hex.EncodedLen:
package main
import (
"encoding/hex"
"fmt"
)
func main() {
src := []byte{0x01, 0x02, 0x03}
// Неверный размер - вызовет панику
dst := make([]byte, 4)
n := hex.Encode(dst, src)
fmt.Printf("n: %d, dst: %s\n", n, dst)
}
Результат выполнения кода (паника):
panic: runtime error: slice bounds out of range
Смотрите также
-
функцию
hex.EncodeToString,
которая сразу возвращает строку -
функцию
hex.Decode,
которая выполняет обратное преобразование -
функцию
hex.DecodeString,
которая декодирует строку в байты -
функцию
hex.Dump,
которая выводит данные в шестнадцатеричном дампе