注册 登录
编程论坛 C语言论坛

如何将结构体里的数据打印出来

纯蓝之刃 发布于 2019-10-16 18:17, 5009 次点击
typedef struct
{  
    short SoeTieDian;
    short SoeMS;  
    short station_mod;
    short fault_delay;
    short para_set;
    short reserve_s6;
    short reserve_s7;
    short reserve_s8;
    short DatBySCD;
    short reserve_s10;
    float reserve_f1;
    float reserve_f2;
    short AVC_delay;
    short AVC_YK_timeout;
    char  reserve_c[36];
}Share_SwitchS_F0;
例如结构体变量是这个样子的,我如何把这些量以结构体的形式打印出来,16进制的数也可以。像Share_SwitchS_F0=xxxxxxxx。这种整体输出
3 回复
#2
吹水佬2019-10-16 20:48
这串xxxxxxxx是什么意思?
#3
纯蓝之刃2019-10-17 08:36
就是我可以不去区分这个结构体里各个成员的内容,可以直接把这个结构体内存空间里的数据以16进制全部取出来后,人工分析就行。因为要取的数据在许多不同的结构体中,想找到一种不论结构体结构是什么样子的,都能把数据取出来的方法。
#4
rjsp2019-10-17 08:55
回复 3楼 纯蓝之刃
那你就将之当成一整块内存打印呗
程序代码:
#include <stdio.h>

void printmemory( const char* varname, const void* mem, size_t size )
{
    printf( "{%s=", varname );
    for( size_t i=0; i!=size; ++i )
        printf( "%02hhX", ((const unsigned char*)mem)[i] );
    printf( "}\n" );
}
#define PRTMEM(sn) printmemory(#sn,&sn,sizeof(sn))

struct foo
{
    int a;
    int b;
};

struct bar
{
    int a, b, c;
};

int main( void )
{
    foo f = { 1, 2 };
    PRTMEM( f );

    bar b = { 1, 2, 3 };
    PRTMEM( b );
}

一种可能的输出是:
{f=0100000002000000}
{b=010000000200000003000000}

1