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
471 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!

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