Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Penukaran Antara Satu Bait dan Lapan Nilai Boolean dengan Cekap?

Bagaimana untuk Penukaran Antara Satu Bait dan Lapan Nilai Boolean dengan Cekap?

Linda Hamilton
Lepaskan: 2024-12-12 11:38:08
asal
577 orang telah melayarinya

How to Efficiently Convert Between a Byte and Eight Boolean Values?

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

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan