struct datafeed
{
    int    seqno0 ;
    char   name0[13] ;
    double bestbuyprc1 ;
    double bestsellprc1 ;
    int    seqno1 ;
    char   name1[13] ;
    double lastprice ;
    int    volume ;
    int    seqno2 ;
    char   name2[13] ;
    int    bestbuyvol1 ;
    int    bestsellvol1 ;
} ;

#define OFFSETOF(var)  offsetof(datafeed,var)
#define GETNUM(var) memcpy( &var,(char*) &feed + OFFSETOF(var),sizeof(var))
#define GETSTR(var,len) memcpy( &var,(char*) &feed + OFFSETOF(var),len )

int main()
{
    datafeed feed ={100,"seqno0",111.1,112.2,102,"seqno1",333.3,333,199,"seqno2",555,666 } ;

    int x0 = OFFSETOF(seqno0) ;
    int x1 = OFFSETOF(seqno1) ;
    int x2 = OFFSETOF(seqno2) ;
    printf("(%d)(%d)(%d)\n",x0,x1,x2) ;
    double bestbuyprc1 ;
    GETNUM(bestbuyprc1) ;
    printf("bestbuyprc1=(%f)\n",bestbuyprc1 ) ;
    char name2[128] ={0} ;
    GETSTR(name2,strlen(feed.name2) ) ;
    printf("name2=(%s)\n",name2 ) ;
} //main

g++ --std=c++0x offset.cpp -o offset.exe

(0)(40)(76)
bestbuyprc1=(111.100000)
name2=(seqno2)

 

創作者介紹
創作者 hedgezzz 的頭像
hedgezzz

hedgezzz的部落格

hedgezzz 發表在 痞客邦 留言(0) 人氣()