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:
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)
Ini mengembalikan kepingan Go ([]bait) yang mewakili memori yang ditunjuk oleh C my_buf tatasusunan.
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)
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)
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!