Чтение / запись клев (без битовых полей) в C / C ++ - PullRequest
3 голосов
/ 24 июня 2010

Есть ли простой способ чтения / записи полубайта в байте без использования битовых полей?Мне всегда нужно будет читать оба клева, но каждый из них нужно будет писать по отдельности.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 24 июня 2010

Используйте маски:

char byte;
byte = (byte & 0xF0) | (nibble1 & 0xF); // write low quartet
byte = (byte & 0x0F) | ((nibble2 & 0xF) << 4); // write high quartet

Возможно, вы захотите поместить это в макросы.

1 голос
/ 24 июня 2010

Наименьшая единица, с которой вы можете работать, - это один байт.Если вы хотите управлять битами, вы должны использовать побитовые операторы .

0 голосов
/ 24 июня 2010

Вы можете создать себе псевдо-союз для удобства:

union ByteNibbles
{
    ByteNibbles(BYTE hiNibble, BYTE loNibble)
    {
        data = loNibble;
        data |= hiNibble << 4;
    }

    BYTE data;
};

Используйте это так:

ByteNibbles byteNibbles(0xA, 0xB);

BYTE data = byteNibbles.data;
...