亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Go 中訪問原始 C 結構上的字段

在 Go 中訪問原始 C 結構上的字段

Go
鳳凰求蠱 2021-08-16 18:37:55
我正在嘗試使用 Go 中的 OpenCV。OpenCV 定義了一個CvMat具有data字段的結構體:typedef struct CvMat{    ...    union    {        uchar* ptr;        short* s;    } data;}我正在使用此處找到的 opencv 綁定。這有一個類型別名CvMat:type Mat C.CvMat現在我有一個Mat對象,我想訪問data它的字段。我怎樣才能做到這一點?如果我嘗試訪問_data,它不起作用。我Mat用reflect包打印了對象上的字段并得到了這個:...{data github.com/lazywei/go-opencv/opencv [8]uint8  24 [5] false}...所以上面有一個data字段,但它甚至不是同一種類型。這是一個 8uint8秒的數組!我正在尋找一個uchar*比 8 個字符長得多的字符。我如何才能做到這一點uchar?
查看完整描述

1 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

簡短的回答是,如果不修改go-opencv. 這里有一些障礙:

  1. 導入包時,只能使用已導出的標識符。在這種情況下,data不以大寫字母開頭,因此不會導出。

  2. 即使它是一個導出的標識符,你也會遇到麻煩,因為 Go 不支持聯合。因此,該字段由一個字節數組表示,該數組與底層 C 聯合的大小相匹配(在本例中為 8 個字節,與 64 位指針的大小相匹配)。

  3. 最后,強烈建議不要cgo從包中公開類型。因此,即使在這種可以直接訪問底層 C 結構的情況下,我也建議不要這樣做。

理想情況下go-opencv會為您所追求的信息提供一個訪問器(大概是一個可以檢查聯合的哪個分支正在使用的訪問器,而不是默默地返回錯誤數據。我建議您要么在包上提交錯誤報告(可能帶有補?。?),或者如果您立即需要該功能,則創建帶有所需修改的私人副本。


查看完整回答
反對 回復 2021-08-16
  • 1 回答
  • 0 關注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號