登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-03-31 18:12:33 478浏览 收藏

今天golang学习网给大家带来了《如何在 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?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>