+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > 如何在 ARM 中将返回的 uint8_u 转换为 GoString? >

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

时间:2024-04-08 08:39:33

今天给大家带来了《如何在 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?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title