Есть следующий код:
func main() {
bts := []byte("kek")
btsToStr := fmt.Sprintf("%x", bts)
fmt.Println(btsToStr)
strToBts := []byte(btsToStr)
fmt.Println(fmt.Sprintf("%x", strToBts))
}
Он выведет:
6b656b
366236353662
Почему так происходит? По идее должны быть одни и те же байты, но, кажется, sprintf как-то меняет данные.
В это же время следующий код:
func main() {
bts := []byte("kek")
btsToStr := string(bts)
fmt.Println(btsToStr)
strToBts := []byte(btsToStr)
fmt.Println(string(strToBts))
}
Выведет:
kek
kek
Из-за чего так происходит?
Второй пример мне не подходит, потому что если подать ему странные символы, которые не читаются UTF8, то у меня в базу данные не попадут.
Подскажите пожалуйста, как можно нормально конвертить из байтов в строку и обратно?