РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
73 of 1593 menu

Преобразование string в []byte и обратно

Преобразование между типами string и []byte в Go выполняется с помощью явного приведения типов. Для преобразования строки в срез байт нужно написать []byte(str), а для обратного преобразования - string(bytes). Важно понимать, что при таком преобразовании создается новая копия данных, поэтому изменения в срезе байт не влияют на исходную строку, и наоборот.

Преобразование string в []byte

Для преобразования строки в срез байт используется конструкция []byte(str). В результате мы получаем срез, содержащий байтовое представление строки в кодировке UTF-8.

Пример

Давайте преобразуем строку "abcde" в срез байт и выведем его содержимое:

package main import "fmt" func main() { str := "abcde" bytes := []byte(str) fmt.Println(bytes) }

Результат выполнения кода:

[97 98 99 100 101]

Как видите, каждый символ строки преобразуется в соответствующий байтовый код ASCII.

Пример

Давайте преобразуем строку с русскими символами в срез байт:

package main import "fmt" func main() { str := "привет" bytes := []byte(str) fmt.Println(bytes) }

Результат выполнения кода:

[208 191 209 128 208 184 208 178 208 181 209 130]

В этом случае каждый символ кодируется несколькими байтами в кодировке UTF-8.

Преобразование []byte в string

Для обратного преобразования среза байт в строку используется конструкция string(bytes). Это позволяет восстановить строку из ее байтового представления.

Пример

Давайте преобразуем срез байт обратно в строку:

package main import "fmt" func main() { bytes := []byte{97, 98, 99, 100, 101} str := string(bytes) fmt.Println(str) }

Результат выполнения кода:

"abcde"

Пример

Давайте преобразуем срез байт с кириллическими символами в строку:

package main import "fmt" func main() { bytes := []byte{208, 191, 209, 128, 208, 184, 208, 178, 208, 181, 209, 130} str := string(bytes) fmt.Println(str) }

Результат выполнения кода:

"привет"

Важные нюансы

При преобразовании string в []byte и обратно создается копия данных. Это означает, что изменения в срезе байт не влияют на исходную строку. Однако, если вам нужно изменить строку, преобразование в []byte - это стандартный и эффективный способ.

Пример

Давайте покажем, что строка и срез байт независимы друг от друга:

package main import "fmt" func main() { str := "abcde" bytes := []byte(str) bytes[0] = 122 // меняем первый байт на 'z' fmt.Println("Original string:", str) fmt.Println("Modified bytes:", bytes) fmt.Println("String from modified bytes:", string(bytes)) }

Результат выполнения кода:

"Original string: abcde" "Modified bytes: [122 98 99 100 101]" "String from modified bytes: zbcde"

Как видите, исходная строка осталась неизменной, а изменения затронули только срез байт.

Смотрите также

  • функцию to-byte-slice,
    которая преобразует другие типы в срез байт
  • функцию to-byte,
    которая преобразует значение в тип byte
  • функцию to-string,
    которая преобразует другие типы в строку
  • функцию to-rune-slice,
    которая преобразует строку в срез рун
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить