关于如何使用cgo将C语言中的*int32指针转为Go语言中的[]int

本文介绍了在Go项目中使用cgo封装FFmpeg API时,如何将C语言中的*int32指针转换为Go语言的[]int整形切片。在操作指针时,由于Go不支持直接的指针运算,需要通过uintptr进行转换,并且要注意在不同操作系统中int的位数差异。详细步骤包括:将指针转为uintptr,增加32位,再转换回*int32,并使用*操作符读取内容添加到切片。
摘要由CSDN通过智能技术生成

最近在写利用go语言的cgo来包装ffmepg api的项目,该项目来源于github的goav项目(1k starts),但是作者貌似去做收费项目了,这个项目很久没有维护。

我fork了一份这个项目,并扩写了tutorial,tutorial来源于大名鼎鼎的ffmpeg-libav-tutorial项目(5.6k stars),我打算将3个tutorial用goav实现一次。

做的时候发现了原来goav有很多ffmpegapi没有封装。所以需要自己去写封装,封装使用的是go原生的cgo。

其中遇到了就是获取codec对象的pix_fmts,pix_fmts是一个*int32,我需要将这个值转化为go中的[]int 整形切片。

先上代码

func (c *Codec) GetPixFmts() []int {
	var ret []int
	pointer := c.pix_fmts
	fmt.Printf("%d",pointer)
	elementPointer := uintptr(unsafe.Pointer(pointer))
	element := (int)(*((*int32)(unsafe.Pointer(elementPointer))))
	for element !=-1{
		elementPointer = elementPointer + 32
		ret = append(ret,element)
		element =(int)(*((*int32)(unsafe.Pointer(elementPoi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值