1 回答

TA貢獻1801條經驗 獲得超8個贊
例如,用作底層C數組的gDataGo切片引用。bytecDatachar
package main
import (
? ? "fmt"
? ? "unsafe"
)
/*
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int printData(unsigned char *data) {
? ? return printf("cData: %lu \"%s\"\n", (long unsigned int)strlen(data), data);
}
*/
import "C"
func main() {
? ? // Allocate C data buffer.
? ? width, height := 8, 2
? ? lenData := width * height
? ? // add string terminating null byte
? ? cData := (*C.uchar)(C.calloc(C.size_t(lenData+1), C.sizeof_uchar))
? ? // When no longer in use, free C allocations.
? ? defer C.free(unsafe.Pointer(cData))
? ? // Go slice reference to C data buffer,
? ? // minus string terminating null byte
? ? gData := (*[1 << 30]byte)(unsafe.Pointer(cData))[:lenData:lenData]
? ? // Write and read cData via gData.
? ? for i := range gData {
? ? ? ? gData[i] = '.'
? ? }
? ? copy(gData[0:], "Data")
? ? gData[len(gData)-1] = 'X'
? ? fmt.Printf("gData: %d %q\n", len(gData), gData)
? ? C.printData(cData)
}
輸出:
gData: 16 "Data...........X"
cData: 16 "Data...........X"
- 1 回答
- 0 關注
- 262 瀏覽
添加回答
舉報