Цитата(011119xx @ Jul 22 2011, 10:13)

Как это сделать правильно и компактно?
Начнем с того, что за это массив и как он получен?
Если я Вас правильно понял, Вам нужно заполнить экземпляр структуры данными, хранящимися в массиве. Для этого изначально нужно этот массив получить, вычитав экземпляр. Размер массива должен быть как минимум sizeof(settings_data_t) в Вашем случае. Помните, что размер структуры не обязательно равен сумме типов данных в ней описанных.
Так, копирование экземпляра структуры в массив и наоборот будет выглядеть так:
Код
typedef struct _SETTINGS_DATA
{
unsigned char theme;
unsigned char volume;
unsigned short timing;
} settings_data_t;
settings_data_t Settings_Data;
unsigned char Data[4]; // Размер в байтах равен(кратен) sizeof(Settings_Data)
void f(void)
{
Settings_Data.theme = 8;
Settings_Data.timing = 478;
Settings_Data.volume = 45;
memcpy( &Data[0], &Settings_Data, sizeof(Settings_Data) ); // Из структуры в массив
memcpy( &Settings_Data, &Data[0], sizeof(Settings_Data) ); // Из массива в структуру
}