Я хочу разобрать кусок памяти в структуру. Проблема состоит в том, что члены не одно за другим, а некоторые дополнения.Make struct member dummy
struct foo {
unsigned int a; // @ 0
unsigned int junk; // @ 0x4
unsigned int b; // @ 0x08
unsigned int more_junk;
.........
};
Я не хочу назначать каждого члена в структуре для каждого мусора, который у меня есть. Я знаю, что это возможно с профсоюзами, но не уверен в структурах.
Update Я сделаю еще более яркий пример:
#include <stdio.h>
#include <string.h>
main()
{
struct w {
unsigned long a;
unsigned long b;
unsigned long c;
unsigned long d;
};
struct w *q;
unsigned long array[] =
{
0x11111111,
0x22222222,
0x33333333,
0x44444444
};
q = (struct w*)array;
printf("%x\n", q->a);
printf("%x\n", q->b);
printf("%x\n", q->c);
printf("%x\n", q->d);
}
Выход есть:
11111111
22222222
33333333
44444444
Lets говорят, что 3-х являются нежелательной. Тот же самый пример:
#include <stdio.h>
#include <string.h>
main()
{
struct w {
unsigned long a;
unsigned long b;
unsigned long d;
};
struct w *q;
unsigned long array[] =
{
0x11111111,
0x22222222,
0x33333333,
0x44444444
};
q = (struct w*)array;
printf("%x\n", q->a);
printf("%x\n", q->b);
printf("%x\n", q->d);
}
Выход:
11111111
22222222
33333333
Но это должно быть:
11111111
22222222
44444444
В памяти есть значения для 'a' и' b', смежные или разделенные пробелом для 'junk'? – JS1
Существует пробел. Все мои члены беззнакомы. Также разрыв не всегда ровный. – selfbg
@selfbg Поскольку ваш вопрос действительно неясен в отношении формата вашего источника данных, все ответы снимаются в темноте. Но из того, что я могу собрать, назначение каждого члена вручную - единственный разумный способ сделать это. – user694733