Функция 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