Anon
Anon

Reputation: 27

Reading in bytes from a struct one at a time

I have a struct of six 16 bit integers and 1 32 bit integer (16 byte's total) and I'm trying to read in the struct one at a time. Currently I use

printf("%.4x %.4x %.4x %.4x %.4x %.4x %.4x\n", );

with the 7 struct members as the following parameters.

My output is as following:

 0001 0100 0010 0002 0058 0070 464c45

And I would like to format it as:

01 00 00 01 10 00 02 00  58 00 70 00 45 4c 46 00

I've been searching everywhere to try and find out how to properly format it. Any help would be greatly appreciated! thank you in advance!

Upvotes: 1

Views: 2013

Answers (1)

Daniel Jour
Daniel Jour

Reputation: 16156

You can just move an unsigned char pointer over the struct, reading byte for byte (I hope I don't mix things up with C++, getting into undefined behavior may happen when doing such things):

#include <stdio.h>
#include <stdint.h>

struct Data {
    int16_t small[6];
    int32_t big;
};

void funky_print(struct Data const * data) {
    unsigned char const * ptr = (unsigned char const *)data;
    size_t i;
    printf("%.2hhx", *ptr);
    ++ptr;
    for (i = 1; i < sizeof(*data); ++i) {
        printf(" %.2hhx", *ptr);
        ++ptr;
    }
}

int main(void) {
    struct Data d = {{0xA0B0, 0xC0D0, 84, 128, 3200, 0}, 0x1BADCAFE};
    funky_print(&d);
    return 0;
}

(Live here)

Upvotes: 1

Related Questions