Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menukar Tatasusunan C [1024]C.char kepada Tatasusunan Go [1024]bait?

Bagaimana untuk Menukar Tatasusunan C [1024]C.char kepada Tatasusunan Go [1024]bait?

Susan Sarandon
Lepaskan: 2024-12-18 21:51:11
asal
785 orang telah melayarinya

How to Convert a C [1024]C.char Array to a Go [1024]byte Array?

Menukar C [1024]C.char kepada Go [1024]bait

Dalam Go, apabila berurusan dengan struktur data C, selalunya perlu menukar antara Go yang sepadan jenis. Satu penukaran sedemikian ialah mengubah tatasusunan aksara C (char[1024]) kepada tatasusunan bait Go ([1024]bait).

Percubaan secara langsung untuk menukar antara jenis ini boleh mengakibatkan ralat seperti "tidak boleh tukar (*_Cvar_my_buf) (taip [1024]C.char) kepada taip [1024]bait". Untuk mengatasinya, kami membentangkan dua pendekatan:

Menggunakan Slice untuk Penukaran Tidak Langsung

Pendekatan yang disyorkan adalah dengan terlebih dahulu menukar tatasusunan C menjadi kepingan Go menggunakan C.GoBytes():

mySlice := C.GoBytes(unsafe.Pointer(&C.my_buf), C.BUFF_SIZE)
Salin selepas log masuk

Ini mengembalikan kepingan Go ([]bait) yang mewakili memori yang ditunjuk oleh C my_buf tatasusunan.

Menghantar Penuding untuk Penukaran Terus

Sebagai alternatif, anda boleh "menghantar" penuding tatasusunan C melalui penuding yang tidak selamat.Penunjuk untuk mencipta kepingan Go:

mySlice := unsafe.Slice((*byte)(unsafe.Pointer(&C.my_buf)), C.BUFF_SIZE)
Salin selepas log masuk

Pendekatan ini menyediakan akses terus kepada ingatan tetapi harus dikendalikan dengan berhati-hati.

Untuk mendapatkan yang diingini [1024]tatasusunan bait, anda boleh menukar kepingan:

myArray := ([C.BUFF_SIZE]byte)(mySlice)
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menukar Tatasusunan C [1024]C.char kepada Tatasusunan Go [1024]bait?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan