Как своеобразное продолжение вопроса печати необработанных шестнадцатеричных данных из структуры: Printf необработанных данных с шестнадцатеричным выводом фиксированной длины
У меня есть структура, которая содержит указатели на другие данные. Есть ли простой способ напечатать эту структуру и содержимое указателей в виде необработанных шестнадцатеричных значений в одном непрерывном потоке? При печати шестнадцатеричных значений B ниже используется:
// @note not actually valid code
struct B myStruct;
struct A myOtherStruct;
myStruct.c = &myOtherStruct;
unsigned char * p = (unsigned char *)myStruct;
for(int i = 0; i < sizeof(struct B) + sizeof(struct A); i++) //
printf("%02x ", p[i]);
Естественно, я получаю адрес только по адресу myStruct.c
(потому что, как я полагаю, это именно то, что есть).
struct A
{
int a;
char b;
};
struct B
{
int a;
char b;
void * c; // usually a struct A, ignore type-safety for simplicity
};
Я попытался вручную освободить место для данных в struct B
с помощью malloc
и скопировать struct A
, но, похоже, не сработал. Пытаясь сделать это из любопытства.