Я переношу приложение на платформу ARM на C, приложение также работает на процессоре x86 и должно быть обратно совместимо.
У меня возникают некоторые проблемы с выравниванием переменных. Я прочитал руководство gcc для
__attribute__((aligned(4),packed))
Я интерпретирую то, что сказано, когда начало структуры выровнено по 4 байтовой границе, а внутренняя часть остается нетронутой из-за упакованного оператора.
typedef struct
{
unsigned int code;
unsigned int length;
unsigned int seq;
unsigned int request;
unsigned char nonce[16];
unsigned short crc;
} __attribute__((packed)) CHALLENGE;
поэтому я изменяю его на это.
typedef struct
{
unsigned int code;
unsigned int length;
unsigned int seq;
unsigned int request;
unsigned char nonce[16];
unsigned short crc;
} __attribute__((aligned(4),packed)) CHALLENGE;
Понятное, что я сказал ранее, кажется неправильным, поскольку и структура теперь выровнена с границей 4 байта, а внутренние данные теперь выровнены с границей из четырех байтов, но из-за энтианны размер структуры увеличился в размере от 42 до 44 байт. Этот размер имеет решающее значение, так как у нас есть другие приложения, которые зависят от структуры, составляющей 42 байта.
Может ли кто-нибудь описать мне, как выполнить требуемую операцию. Любая помощь очень ценится.