今天给大家带来了《如何在 ARM 中将返回的 uint8_u 转换为 GoString?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~
问题内容
我使用 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)
无法将 cresult(类型 *_ctype_schar)用作类型 *_ctype_char _cfunc_gostring 的参数
我知道它有一个转换问题,但如果我在 c 中将 uint8_u * 转换为 char * 就可以了(我确信这个转换不会有问题)。
当我使用“go version go1.10.3 linux/amd64”将其投射到我的 amd64 电脑上时,它会构建,尽管在使用“go version go1.10.3 linux/arm”的arm机器上我收到错误
无法将 cresult(类型 *_ctype_schar)转换为类型 *_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);
}
并将此包装器包含在您的 go 代码中
终于介绍完啦!小伙伴们,这篇关于《如何在 ARM 中将返回的 uint8_u 转换为 GoString?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧