Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencantum dan Menyahkod Lapan Nilai Boolean dengan Cekap menjadi Bait Tunggal?

Bagaimanakah Saya Boleh Mencantum dan Menyahkod Lapan Nilai Boolean dengan Cekap menjadi Bait Tunggal?

DDD
Lepaskan: 2024-12-31 22:28:10
asal
989 orang telah melayarinya

How Can I Efficiently Merge and Decode Eight Boolean Values into a Single Byte?

Menggabung dan Menyahkod Nilai Boolean kepada Bait

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;
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

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;
};
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan