Mencipta Bait daripada Nilai Boolean dan Sebaliknya
Masalah:
Anda mempunyai lapan Pembolehubah Boolean dan keinginan untuk menggabungkannya menjadi satu bait. Sebaliknya, anda berhasrat untuk menyahkod bait kepada lapan nilai Boolean yang berbeza.
Penyelesaian:
Cara Sukar:
unsigned char ToByte(bool b[8]) { unsigned char c = 0; for (int i = 0; i < 8; ++i) if (b[i]) c |= 1 << i; return c; } void FromByte(unsigned char c, bool b[8]) { for (int i = 0; i < 8; ++i) b[i] = (c & (1 << i)) != 0; }
Sejuk Cara:
struct Bits { unsigned b0 : 1, b1 : 1, b2 : 1, b3 : 1, b4 : 1, b5 : 1, b6 : 1, b7 : 1; }; union CBits { Bits bits; unsigned char byte; };
Tugaskan kepada satu ahli kesatuan dan baca daripada ahli kesatuan yang lain. Ambil perhatian bahawa susunan bit dalam Bit adalah ditakrifkan pelaksanaan.
Awas:
Menggunakan kesatuan dengan cara ini ditakrifkan dengan baik dalam ISO C99 dan disokong oleh beberapa C penyusun, tetapi ia adalah Kelakuan Tidak Ditakrifkan dalam ISO C . Gunakan memcpy atau std::bit_cast untuk tebuk jenis mudah alih dalam C 20.
Atas ialah kandungan terperinci Bagaimana untuk Penukaran Antara Satu Bait dan Lapan Nilai Boolean dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!