我想從一個go [] []字節轉換爲C **字符。換句話說,我有一個字節矩陣,我想將其轉換爲C中的字符雙指針。如何從[] []字節轉換爲** char in go
請假設我必須有一個[] []字節作爲輸入,並且** char作爲輸出。
我知道這是可以從[]字節轉換爲*通過執行類似字符:但似乎
((*C.char)(unsafe.Pointer(&data[0])))
它並不可能這種情況下延伸到第二維。我嘗試了一些相當精巧的東西,在這裏我將[] []字節裝入新的[]字節。然後我將這個[]字節發送到一個C函數,該函數使用指針運算創建一個** char,以指向正確位置的新[]字節。
雖然這種轉換給了我奇怪的行爲,但我的數據在幾次迭代中都是正確的,但在函數調用之間看起來會被破壞。
如果有人有任何想法,我會非常感激。
從答覆中我看到,說明我正在處理原始數據而不是字符串也很重要。因此,去字節類型。因此,如果添加C字符串結束符,原始數據將被破壞。我只是使用C ** char,因爲char是一個字節的大小。這就是說,謝謝你的迴應。我能夠根據我的需要調整已接受的答案。
我不認爲你已經終止了C字符串你有嗎?你的例子工作,但我懷疑你很幸運! – 2013-02-12 20:02:17
完全正確。行*元素=(* C.char)(unsafe.Pointer(&list [i] [0]))'理想地應該讀取'* element = C.CString(string(list [i]))' – jimt 2013-02-13 00:49:20
等待,爲什麼C結構必須以空結束?請不要以爲我正在使用字符串。我正在處理原始數據緩衝區。字符串函數是否仍然必須使用? – 2013-02-13 06:39:55