gpt4 book ai didi

c - 如何将返回的 uint8_u 转换为 ARM 中的 GoString?

转载 作者:数据小太阳 更新时间:2023-10-29 03:11:08 26 4
gpt4 key购买 nike

我使用 cgo 从 Go 调用 C 函数。该函数的返回类型为 uint8_u *。我知道它是一个字符串,需要在 Go 中打印它。

我在 myFile.go 中有以下内容

package main

// #cgo CFLAGS: -g
// #include <stdlib.h>
// #include "cLogic.h"
import "C"
import (
"fmt"
"unsafe"
)

func main() {
myString := "DUMMY"
cMyString := C.CString(myString)
defer C.free(unsafe.Pointer(cMyString))

cMyInt := C.int(10)

cResult := C.MyCFunction(cMyString, cMyInt) // Result is type *_Ctype_schar (int8_t *)
goResult := C.GoString(cResult)
fmt.Println("GoResult: " + goResult + "\n")
}

在文件cLogic.h中

#include <stdint.h>

int8_t *MyCFunction(char *myString, int myInt);

在文件 cLogic.c 中

#include <stdint.h>

int8_t *MyCFunction(char *myString, int myInt){
return "this is test";
}

我在行中得到一个错误

goResult := C.GoString(cResult)

cannot use cResult (type *_Ctype_schar) as type *_Ctype_char in argument to _Cfunc_GoString

我知道它有一个转换问题,但如果我在 C 中将 uint8_u * 转换为 char * 就没问题(我确信我不会因为这个转换而遇到问题)。

当我使用“go version go1.10.3 linux/amd64”将它转换到我的 amd64 电脑上时,它构建了,尽管在带有“go version go1.10.3 linux/arm”的 arm 机器上我得到了错误

cannot convert cResult (type *_Ctype_schar) to type *_Ctype_char

最佳答案

所以添加包装器

包装器.h

#include <stdint.h>

char *mywrapper(char *myString, int myInt);

包装器.c

#include <stdint.h>
#include "cLogic.h"

char *mywrapper(char *myString, int myInt);
{
return (char *)MyCFunction(myString, myInt);
}

并将这个包装器包含在你的代码中

关于c - 如何将返回的 uint8_u 转换为 ARM 中的 GoString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51567313/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com