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

Тип C.char

Тип C.char в пакете cgo представляет собой символьный тип данных, соответствующий типу char в языке C. Этот тип используется для передачи отдельных символов между Go и C, а также для работы со строками через указатели на массивы символов. Тип C.char является числовым целочисленным типом, который может быть как знаковым, так и беззнаковым в зависимости от платформы. В Go этот тип определяется как int8 на большинстве платформ, но для безопасности рекомендуется использовать именно C.char, а не его явное приведение к конкретному целочисленному типу.

Синтаксис

Тип C.char используется в объявлениях переменных, параметрах функций и при работе с C-строками. Обычно он применяется совместно с функциями конвертации C.CString и C.GoString для преобразования между Go-строками и C-строками.

var ch C.char var str *C.char

Пример

Давайте создадим переменную типа C.char и присвоим ей символ:

package main import "fmt" /* #include <stdio.h> */ import "C" func main() { var ch C.char = 'A' fmt.Printf("char: %c, value: %d\n", ch, ch) }

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

"char: A, value: 65"

Пример

Рассмотрим передачу массива символов типа C.char из Go в C-функцию:

package main /* #include <stdio.h> void printChars(char *arr, int len) { for (int i = 0; i < len; i++) { printf("%c ", arr[i]); } printf("\n"); } */ import "C" import "unsafe" func main() { arr := []C.char{'H', 'e', 'l', 'l', 'o'} C.printChars((*C.char)(unsafe.Pointer(&arr[0])), C.int(len(arr))) }

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

"H e l l o "

Пример

Рассмотрим получение массива C.char из C-функции в Go:

package main import "fmt" /* char *getMessage() { return "Hello from C"; } */ import "C" func main() { msg := C.getMessage() goStr := C.GoString(msg) fmt.Println(goStr) }

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

"Hello from C"

Пример

Рассмотрим работу со срезами типа C.char и их преобразование в Go-строку:

package main import "fmt" /* #include <stdlib.h> #include <string.h> */ import "C" import "unsafe" func main() { cStr := C.CString("Golang with C") defer C.free(unsafe.Pointer(cStr)) length := C.strlen(cStr) charSlice := (*[1 << 30]C.char)(unsafe.Pointer(cStr))[:length:length] for i, ch := range charSlice { fmt.Printf("char[%d]: %c\n", i, ch) } }

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

"char[0]: G" "char[1]: o" "char[2]: l" "char[3]: a" "char[4]: n" "char[5]: g" "char[6]:" "char[7]: w" "char[8]: i" "char[9]: t" "char[10]: h" "char[11]:" "char[12]: C"

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

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