Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Nilai Boolean Boleh Dikodkan dan Dinyahkodkan dengan Cekap kepada Bait?

Bagaimanakah Nilai Boolean Boleh Dikodkan dan Dinyahkodkan dengan Cekap kepada Bait?

Susan Sarandon
Lepaskan: 2024-12-11 08:23:10
asal
597 orang telah melayarinya

How Can Boolean Values Be Efficiently Encoded and Decoded into Bytes?

Menyahkod dan Mengekodkan Nilai Boolean masuk dan keluar daripada Bait

Menyahkod dan mengekod nilai boolean masuk dan keluar daripada bait boleh dicapai melalui pelbagai kaedah. Artikel ini akan meneroka dua pendekatan:

Cara Sukar:

Menggunakan pendekatan manipulasi bit terus, fungsi berikut digunakan:

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

Dalam kaedah ini, setiap nilai boolean diwakili oleh bit, dengan bait (8 bit) boleh menyimpan 8 boolean nilai.

Cara Cool:

Pendekatan alternatif memanfaatkan medan bit dalam struktur dan kesatuan untuk menyediakan manipulasi data yang fleksibel:

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

Di sini , struktur Bits memegang 8 nilai boolean sebagai medan bit. Kesatuan CBits berkongsi ruang memori yang sama, membenarkan akses kepada nilai boolean melalui ahli bit atau nilai bait melalui ahli bait.

Nota Pelaksanaan:

  • Pesanan bitfield dan padding ditentukan oleh pelaksanaan.
  • Membaca daripada seorang ahli kesatuan selepas menulis kepada satu lagi ditakrifkan dengan baik dalam C99 dan beberapa pelaksanaan C (termasuk MSVC dan GCC), tetapi Tingkah Laku Tidak Ditakrifkan dalam standard C .
  • Untuk C mudah alih , pertimbangkan untuk menggunakan memcpy atau C 20's std::bit_cast untuk type-pun pemutus.

Atas ialah kandungan terperinci Bagaimanakah Nilai Boolean Boleh Dikodkan dan Dinyahkodkan dengan Cekap kepada Bait?. 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