Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Salin bait ke dalam medan struct menggunakan refleksi

Salin bait ke dalam medan struct menggunakan refleksi

WBOY
WBOYke hadapan
2024-02-09 09:00:35479semak imbas

Salin bait ke dalam medan struct menggunakan refleksi

Pengenalan strawberi editor PHP: Dalam pengaturcaraan, kadangkala kita perlu menyalin data bait ke dalam medan struktur. Proses ini boleh dicapai dengan menggunakan refleksi. Refleksi ialah alat yang berkuasa untuk memeriksa dan memanipulasi struktur kod semasa runtime. Melalui refleksi, kita boleh mendapatkan maklumat medan struktur dan menyalin data bait ke dalam struktur mengikut jenis dan susunan medan untuk merealisasikan penukaran dan penugasan data. Pendekatan ini boleh memberi kami kemudahan dan fleksibiliti, membolehkan kami memproses data bait dengan lebih cekap.

Kandungan soalan

Bagaimana untuk mengulang hirisan bait dan menetapkannya ke medan struct?

type s struct {
  f1 []byte
  f2 []byte
  f3 []byte
}

func S s {
  x := s{}
  x.f1 = make([]byte, 4)
  x.f1 = make([]byte, 2)
  x.f1 = make([]byte, 2)
  return x
}

func main() {
  data := []byte{83, 117, 110, 83, 0, 1, 0, 65}

  Z := S()
  //pesudo code from here
  i:= 0
  for field in Z {
    field = data[i:len(field)]
    i += len(field)
  }

Harapan:

  • f1 = [83,117,110,83]
  • f2 = [0,1]
  • f3 = [0,65]

Saya pernah melakukan ini sebelum ini dalam c/c++ tetapi saya tidak tahu bagaimana untuk melakukannya secara berterusan. Saya memerlukan fungsi peruntukan generik kerana saya akan mempunyai beberapa struktur yang berbeza, beberapa daripadanya mungkin tidak wujud dalam aliran.

Sebaik-baiknya saya ingin lulus struct yang dimulakan dan kod saya akan mengisi medan struct mereka secara berulang.

Penyelesaian

Gunakan kod pantulan dalam pakej binari/pengekodan.

Langkah 1: Isytiharkan medan sebagai tatasusunan dan bukannya hirisan.

type s struct {
  f1 [4]byte
  f2 [2]byte
  f3 [2]byte
}

Langkah 2: Gunakan binary.read untuk menyahkod data ke dalam struktur p>

var s s
data := []byte{83, 117, 110, 83, 0, 1, 0, 65}
err := binary.read(bytes.newreader(data), binary.littleendian, &s)
if err != nil {
    log.fatal(err)
}

Langkah 3: Selesai!

fmt.Print(s) // prints {[83 117 110 83] [0 1] [0 65]}

https://www.php.cn/link/42ae1544956fbe6e09242e6cd752444c

Atas ialah kandungan terperinci Salin bait ke dalam medan struct menggunakan refleksi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam