QR-кодирование с битовыми полями - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь выполнить упражнение на языке Си, целью которого является кодирование сообщения во 2-м QR-коде с помощью байтового метода.Это означает, что данная строка должна быть закодирована в сообщении с:

  • 4 бита для индикатора режима (0100 в моем случае);
  • 8 бит для длины сообщения;
  • само сообщение (20 символов);
  • 4 нулевых бита в качестве сигнала конца сообщения;
  • 16 битов для 0xEC11 заполнения.

Я пытался использовать структуру с битовыми полями, как в следующем коде, но это не сработало, потому что порядок бит не может быть принудительно установлен.

typedef struct
{
  unsigned char mode   : 4;
  unsigned int length  : 8;
  unsigned char *message;
  unsigned char eof    : 4;
  unsigned int padding : 16;
} code;

Я также пытался сдвинуть влевобиты закодированного сообщения, но я снова получил сообщение об ошибке «ожидаемое значение int», которое означает (если я правильно понял), я не могу сдвинуть структуру.

Может кто-нибудь предложить элегантный способвыполняет эту задачу?

1 Ответ

0 голосов
/ 06 января 2019

Я в итоге реализовал это с данными в uint8_t и битовым смещением.Это означает, что я сохранил строку в массиве, а затем сдвинул ее, как показано ниже:

for(int n_digit = 0; n_digit <= length; n_digit++)
{
    if(n_digit < length)
    {
        *(code + n_digit) = (*(code + n_digit) << 4) + (*(code + n_digit + 1) >> 4);
    }
    else if (n_digit == length)
    {
        *(code + n_digit) = *(code + n_digit) << 4;
    }
}

Возможно, код не самого высокого качества, но он работает просто отлично.

...