Pengenalan
Selalunya, pengaturcara menghadapi keperluan untuk mewakili nilai boolean dalam bentuk padat, seperti bait tunggal. Artikel ini meneroka dua pendekatan untuk menggabungkan dan menyahkod nilai boolean ke dalam dan daripada bait.
Menggabungkan Nilai Boolean
Untuk menggabungkan lapan nilai boolean ke dalam bait, seseorang boleh menggunakan pendekatan berikut:
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; }
Kod ini berulang ke atas nilai boolean, tetapan bit yang sepadan dalam bait menggunakan operasi bitwise ATAU.
Menyahkod Bait
Untuk menyahkod bait kepada lapan nilai boolean yang berasingan, seseorang boleh menggunakan fungsi ini:
void FromByte(unsigned char c, bool b[8]) { for (int i = 0; i < 8; i++) b[i] = (c & (1 << i)) != 0; }
Fungsi ini berulang ke atas bit dalam bait, menyemak sama ada setiap bit ditetapkan dan menetapkan yang sepadan nilai boolean.
Alternatif Cool: Union
Sebagai alternatif, seseorang boleh menggunakan kesatuan untuk mewakili kedua-dua nilai boolean dan bait:
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; };
Dengan menulis kepada satu ahli kesatuan dan membaca daripada yang lain, seseorang boleh menggabungkan dan menyahkod nilai boolean dengan cekap. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa susunan bit dalam struktur Bit adalah ditakrifkan pelaksanaan.
Nota Pelaksanaan
Adalah penting untuk ambil perhatian bahawa membaca satu ahli sesuatu kesatuan selepas menulis kepada yang lain ditakrifkan dengan baik dalam ISO C99 dan sebagai lanjutan dalam penyusun C utama. Walau bagaimanapun, ia adalah Kelakuan Tidak Ditakrifkan dalam ISO C . Untuk memastikan kemudahalihan, adalah disyorkan untuk menggunakan memcpy atau C 20 std::bit_cast untuk type-punning dalam C .
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencantum dan Menyahkod Lapan Nilai Boolean dengan Cekap menjadi Bait Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!