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
Susan Sarandonasal
2024-12-18 21:51:11789semak imbas

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)

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)

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!

Kenyataan:
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