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

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

如何將 uint8_t 數組從 C 發送到 GO

如何將 uint8_t 數組從 C 發送到 GO

Go
不負相思意 2023-07-31 16:47:10
我想將 uint8_t 數組從 C 發送到 GO,但是當我像指針一樣發送數組時,我不知道如何讀取它并將其保存在 GO 中,例如 byte[] 數組:package main/*#include <stdint.h>uint8_t Plaintext[16] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};uint8_t * send_data( )   {     return  Plaintext;   }*/import "C"import "unsafe"import "fmt"func main() {    data := [16]byte{}    p := C.send_data()    //already try  data = C.send_data()    fmt.Println(p)    data = p // don't know how do this ?}objectif 是在 go 中包含數據字節數組,如下所示:data[16] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}我嘗試了很多解決方案,但每次我有日志說“不能使用(funcliteral)()(類型*_Ctype_uchar)作為類型“uint8”或“byte”...
查看完整描述

1 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

我想將 uint8_t 數組從 C 發送到 Go [并且作為數組或切片]


對于你的例子,


package main


/*

#include <stdint.h>


uint8_t Plaintext[16] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};


uint8_t *send_data( ) {

    return  Plaintext;

}

*/

import "C"


import (

    "fmt"

    "math"

    "unsafe"

)


func main() {

    // your example

    data := (*[16]byte)(unsafe.Pointer(C.send_data()))

    fmt.Printf("\n%T:\n%d %d : %v\n", data, len(data), cap(data), *data)


    // array example

    const c = 16 // array length is constant

    a := (*[c]byte)(unsafe.Pointer(C.send_data()))

    fmt.Printf("\n%T:\n%d %d : %v\n", a, len(a), cap(a), *a)


    // slice example

    var v = 16 // slice length is variable

    var s []byte

    const vmax = math.MaxInt32 / unsafe.Sizeof(s[0])

    s = (*[vmax]byte)(unsafe.Pointer(C.send_data()))[:v:v]

    fmt.Printf("\n%T:\n%d %d : %v\n", s, len(s), cap(s), s)

}

輸出:


[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]


*[16]uint8:

16 16 : [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]


[]uint8:

16 16 : [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]


查看完整回答
反對 回復 2023-07-31
  • 1 回答
  • 0 關注
  • 217 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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