Функция C.GoBytes

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

Синтаксис

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

Пример

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

gopackage 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)
}

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

go"abcde"

Пример

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

gopackage 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)
}

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

go[1 2 3 4 5]

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

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