第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

CGO 如何將 slice 傳給 rust

CGO 如何將 slice 傳給 rust

Go
侃侃無(wú)極 2023-01-03 15:37:16
高朗input := []uint{1,2,3,4,5,6}o := C.fixU32_encode((*C.uint)(unsafe.Pointer(&input[0])), C.size_t(len(input)))return C.GoString(o)Cchar* fixU32_encode(unsigned int* ptr,size_t length);銹pub extern "C" fn fixU32_encode(ptr: *const u32, length: libc::size_t) -> *const libc::c_char {    assert!(!ptr.is_null());    let slice = unsafe {        std::slice::from_raw_parts(ptr, length as usize)    };    println!("{:?}", slice);// there will print [1,0,2,0,3,0]    println!("{:?}", length);    let mut arr = [0u32; 6];    for (&x, p) in slice.iter().zip(arr.iter_mut()) {        *p = x;    }    CString::new(hex::encode(arr.encode())).unwrap().into_raw()}這樣會(huì)傳入,但是rust接收到的數(shù)組是這樣的 [1,0,2,0,3,0]
查看完整描述

1 回答

?
千巷貓影

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

在 Go 中,uint 是 64 位的(參見(jiàn)https://golangbyexample.com/go-size-range-int-uint/)。因此,您將 64 位整數(shù)存儲(chǔ)在input.

C 代碼和 Rust 代碼處理input現(xiàn)在的 32 位無(wú)符號(hào)整數(shù)(小端格式)。所以 64bit 中 0x1 的第一個(gè)輸入:

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001

分別變?yōu)?0x1 和 0x0。由于小字節(jié)序,首先讀取最低有效位。

您希望在 Go 中具體使用 32 位使用uint32或確保您的 C 代碼與 Go 中的機(jī)器相關(guān)整數(shù)類(lèi)型匹配。


查看完整回答
反對(duì) 回復(fù) 2023-01-03
  • 1 回答
  • 0 關(guān)注
  • 116 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)