Я пытаюсь получить 8x8-битные значения из 64-битной структуры и сохранить их в массиве.
Я уже делал это, получая доступ к членам структуры, сдвигая биты и операцию ИЛИ. Однако я подумал об использовании функции memcpy . Я не уверен, что это надежно. Если я правильно понял, в моей структуре нет заполнения, так как оно заполнено на 64-битной основе, а моя структура имеет длину 64 бита. Однако у меня нет ожидаемого результата, когда я делаю копию.
typedef unsigned long long uint64_t;
typedef unsigned char uint8_t;
typedef struct frameHeader_t
{
uint64_t encryption : 2;
uint64_t frameVersion : 2;
uint64_t probeType : 4;
uint64_t dataType : 5;
uint64_t measurePeriod : 3;
uint64_t remontePeriod : 4;
uint64_t nbrMeasure : 2;
uint64_t year : 7;
uint64_t month : 4;
uint64_t day : 5;
uint64_t hour : 5;
uint64_t minute : 6;
uint64_t second : 6;
uint64_t randomization : 5;
uint64_t status : 4;
}FrameHeader;
int main()
{
//declarations
int i;
uint8_t test[8];
FrameHeader frameHeader;
//put value
frameHeader.encryption = 2;
frameHeader.frameVersion = 0;
frameHeader.probeType = 0;
frameHeader.dataType = 1;
frameHeader.measurePeriod = 0;
frameHeader.remontePeriod = 6;
frameHeader.nbrMeasure = 1;
frameHeader.year = 19;
frameHeader.month = 6;
frameHeader.day = 25;
frameHeader.hour = 15;
frameHeader.minute = 49;
frameHeader.second = 00;
frameHeader.randomization = 15;
frameHeader.status = 0;
//copy
memcpy(test, &frameHeader, 8);
//print result
for(i=0;i<sizeof(test);i++)
{
printf("%02x ", test[i]);
}
return 0;
}
Я ожидал: 80 08 64 9B 65 F8 80 F0
Я получил: 02 01 D6 C4 F2 8B 81 07