一次从一个结构中读取字节

时间:2016-01-31 01:28:58

标签: c printing formatting printf byte

我有一个六个16位整数和一个32位整数(总共16个字节)的结构,我试图一次读取一个结构。目前我使用

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

将7个struct成员作为以下参数。

我的输出如下:

 0001 0100 0010 0002 0058 0070 464c45

我想将其格式化为:

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

我一直在各处搜索,试图找出如何正确格式化它。任何帮助将不胜感激!提前谢谢你!

1 个答案:

答案 0 :(得分:1)

你可以在结构上移动一个unsigned char指针,按字节读取字节(我希望我不会混淆C ++,进入未定义的行为可能会发生在做这样的事情时):

#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)