#c
Вопрос:
Файл s_file
содержит следующий номер: 131071.Это равно 0b00000001111111111111111111111111.
Цель состоит в том, чтобы установить первые 8 бит в переменные данные->идентификатор, а остальные (16 бит) в переменные данные->>x_data. Но когда я печатаю идентификатор и x_data, результат следующий:
идентификатор данных: 1
данные x_data: 12337
Некоторая помощь была бы признательна.
#include <fstream>
#include <iostream>
#include <typeinfo>
using namespace std;
typedef struct st_payload_t{
uint8_t id;
uint16_t x_data;
}sf_payload_t;
int main() {
ifstream file;
file.open("s_file", ios::binary|ios::in);
if( file.is_open()){
uint8_t payload[200]={0,};
file.seekg( 0, file.beg); // Possition 0 at the relative beginning of the file
file >> payload;
sf_payload_t* data_1 = (sf_payload_t*) amp;payload[0];
std::cout << "data id: "<<data_1->id<< std::endl;// 00000001 bin - > 1 dec
std::cout << "data x_data: "<<data_1->x_data<< std::endl;// Should be 1111111111111111 bin - > 65535 dec
}
else{
std::cout << "Not reading" << 'n';
}
return 0;
}
Комментарии:
1.
1048575
кажется, он слишком велик для 16 бит (uint16_t
).2.
operator >>
предназначен для использования с отформатированными данными, а не с необработанными двоичными файлами. Есть ли какая-то причина, по которой вам нужно заполнить буфер, а затем выполнить приведение указателя? Я думаю, что я бы просто создалsf_payload_t
объект, а затем использовалfile.read
его для каждой переменной-члена.