Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menukar Tatasusunan C `[1024]C.char` kepada Tatasusunan `[1024]bait` Go dengan Selamat?

Bagaimanakah Saya Boleh Menukar Tatasusunan C `[1024]C.char` kepada Tatasusunan `[1024]bait` Go dengan Selamat?

Susan Sarandon
Lepaskan: 2024-12-06 07:22:11
asal
184 orang telah melayarinya

How Can I Safely Convert a C `[1024]C.char` Array to a Go `[1024]byte` Array?

Menukar C char Array kepada Go byte Array

Apabila bekerja dengan C dan Go, kadangkala perlu menukar antara dua bahasa' jenis tatasusunan. Soalan ini meneroka penukaran tatasusunan C jenis [1024]C.char kepada jenis tatasusunan Go [1024]bait.

Tidak Dapat Menukar Secara Terus

Percubaan untuk melakukan penukaran antara muka mengakibatkan ralat:

cannot convert (*_Cvar_my_buf) (type [1024]C.char) to type [1024]byte
Salin selepas log masuk

Ini kerana kedua-dua jenis tatasusunan pada asasnya berbeza dalam perwakilan memori.

Penyelesaian: Salin ke Hiris

Satu kaedah yang selamat dan mudah untuk menukar tatasusunan C ialah menyalin kandungannya ke kepingan Go. Ini boleh dicapai menggunakan kod berikut:

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

Di sini, C.GoBytes menukar tatasusunan C kepada kepingan Go bait, yang boleh diberikan kepada pembolehubah mySlice.

Penukaran Tidak Selamat

Jika akses memori terus diperlukan, adalah mungkin untuk "menghantar" C tatasusunan kepada tatasusunan Go byte menggunakan unsafe.Pointer. Walau bagaimanapun, ini adalah operasi yang tidak selamat yang harus digunakan dengan berhati-hati:

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

Ini membuang tatasusunan C sebagai kepingan bait. Jika jenis tatasusunan diperlukan, kepingan boleh ditukar:

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Tatasusunan C `[1024]C.char` kepada Tatasusunan `[1024]bait` Go dengan Selamat?. 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