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

Функция C.GoBytes

Функция C.GoBytes преобразует массив байтов из C-памяти в срез байтов Go (тип []byte). Она принимает два параметра: указатель на C-массив (тип *C.char или unsafe.Pointer) и размер данных в байтах (тип C.int). Функция выделяет память в Go и копирует в нее данные из C-области, возвращая новый срез. Важно помнить, что возвращаемый срез не зависит от исходной C-памяти и управляется сборщиком мусора Go.

Синтаксис

C.GoBytes(ptr *C.char, len C.int) []byte

Пример

Давайте создадим C-массив байтов и преобразуем его в срез Go:

package main /* #include <stdlib.h> #include <string.h> */ import "C" import "fmt" func main() { // Создаем C-массив байтов cData := C.CString("abcde") defer C.free(unsafe.Pointer(cData)) // Преобразуем C-массив в срез байтов Go goBytes := C.GoBytes(unsafe.Pointer(cData), C.int(5)) fmt.Printf("%q\n", goBytes) }

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

"abcde"

Пример

Рассмотрим преобразование C-массива с непечатаемыми символами:

package main /* #include <stdlib.h> #include <string.h> */ import "C" import "fmt" import "unsafe" func main() { // Создаем C-массив с байтами cData := C.CBytes([]byte{1, 2, 3, 4, 5}) defer C.free(cData) // Преобразуем в срез байтов goBytes := C.GoBytes(cData, C.int(5)) fmt.Printf("%v\n", goBytes) }

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

[1 2 3 4 5]

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

  • функцию C.GoString,
    которая преобразует C-строку в строку Go
  • функцию C.GoStringN,
    которая преобразует C-строку с заданной длиной в строку Go
  • функцию C.CBytes,
    которая выполняет обратное преобразование — из среза байтов в C-массив
  • функцию C.free,
    которая освобождает память, выделенную в C
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить