Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menukar Antara Lapan Nilai Boolean dan Satu Bait Dengan Cekap?

Bagaimanakah Saya Boleh Menukar Antara Lapan Nilai Boolean dan Satu Bait Dengan Cekap?

DDD
Lepaskan: 2024-12-18 11:59:11
asal
601 orang telah melayarinya

How Can I Efficiently Convert Between Eight Boolean Values and a Single Byte?

Menggabung dan Menyahkod Bait ke dalam Nilai Boolean

Dalam sesetengah senario pengaturcaraan, data binari menjadi perlu untuk memanipulasi pada tahap bit. Satu tugas sedemikian melibatkan penukaran lapan nilai boolean kepada satu bait dan sebaliknya. Artikel ini meneroka kaedah yang cekap untuk mencapai penukaran ini.

Menukar Nilai Boolean kepada Bait

Pendekatan paling mudah untuk menggabungkan nilai boolean kepada bait ialah melalui operasi bitwise. Setiap nilai boolean sepadan dengan kedudukan bit dalam bait, dengan 'true' diberikan kepada '1' dan 'false' kepada '0'. Dengan mengalihkan '1' ke kiri secara berulang berdasarkan nilai boolean dan ORingkannya dengan hasil terkumpul, bait boleh dibina. Proses ini ditunjukkan dalam fungsi 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

Menyahkod bait kepada Nilai Boolean

Sebaliknya, menyahkod bait kepada nilai boolean individu memerlukan proses berulang yang serupa. Dengan mengalihkan bait ke kanan dan membandingkannya dengan topeng '1', setiap kedudukan bit boleh diekstrak dan diberikan nilai boolean 'true' untuk '1' dan 'false' untuk '0'. Fungsi berikut melaksanakan proses 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

Pendekatan Bitfield

Pendekatan alternatif dan berpotensi lebih elegan menggunakan medan bit dan kesatuan. Dengan mentakrifkan struktur dengan lapan medan 1-bit, setiap nilai boolean boleh ditugaskan terus ke medan yang sepadan. Menyatukan struktur ini dengan aksara yang tidak ditandatangani membolehkan penukaran mudah antara kedua-dua jenis data. Ini dicapai melalui coretan kod berikut:

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 memberikan nilai kepada mana-mana ahli kesatuan, penukaran dilakukan secara automatik. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa susunan medan bit dan padding berpotensi mungkin berbeza-beza bergantung pada pelaksanaan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Antara Lapan Nilai Boolean dan Satu Bait 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan