Как использовать битовые поля для копирования данных в структуру из двоичного файла? - PullRequest
0 голосов
/ 12 октября 2018

У меня есть двоичный файл, из которого я пытаюсь извлечь данные.Последние 5 точек данных в файле представляют собой 10-битные целочисленные типы, и я пытаюсь найти способ извлечь эту информацию и преобразовать ее во что-нибудь читаемое.Я попробовал следующий код:

struct bitField
{
    unsigned value: 10;
};

struct Data
{
    bitField x;
}

int main()
{
    std::array<char,696> buffer;
    std::ifstream file ("file.bin", std::ios::in | std::ios::binary);
    file.read(buffer.data(),buffer.size());

    Data a;

    std::memcpy(&a.x.value,&buffer[612],sizeof(struct bitField));

}

Затем я столкнулся с ошибкой attempt to take address of bit-field.Затем я попытался использовать std::bitset<10> вместо bitField в моей структуре данных.И хотя я не получаю сообщение об ошибке компилятора, я получаю кучу нулей, которые, как я считаю, являются неверными данными.

Как правильно читать данные?

1 Ответ

0 голосов
/ 12 октября 2018

Вы не можете получить адрес значения битового поля, так как он может быть не выровнен по байту.Вы должны скопировать непосредственно в ax (не axvalue).

Кроме того, вам не нужно иметь отдельную структуру битового поля.Вы можете просто поместить битовые поля прямо в структуру данных.

Посмотрите, как использовать битовые поля: https://www.geeksforgeeks.org/bit-fields-c/

...