У меня есть проект Visual Studio 2008 C++, где мне нужно декодировать 6-байтовый массив данных в структуру.декодирование двоичных данных blob для структуры
Моя мысль была сделать что-то вроде этого:
#pragma pack(push, 1)
struct Map
{
BYTE alpha : 8;
BYTE bravo : 8;
UINT charlie : 24;
BYTE delta : 8;
BYTE padding0 : 8; // ensure correct byte boundary
BYTE padding1 : 8;
};
#pragma pack(pop)
// sizeof(Map) == 8 bytes
BYTE test_data[ 6 ] = { 0x07, // alpha
0x0B, // bravo
0x00, // charlie high byte
0x00, // charlie med byte
0x01, // charlie low byte
0x33 }; // delta
Map map = { };
memcpy(&map, test_data, sizeof(test_data));
ASSERT(map.alpha == 0x07);
ASSERT(map.bravo == 0x0B);
ASSERT(map.charlie == 0x01);
ASSERT(map.delta == 0x33);
Но, данные в charlie
и delta
никогда не бывает правильным.
Есть ли способ структурировать мою структуру, чтобы получить это правильно или я застрял в настройке каждого поля отдельно?
Thanks
Вы смотрите, как вы только положить 3 байта в Чарли; для 32-битной платформы потребуется 4 байта. Кроме того, убедитесь, что ваша endianess правильная. –