编辑代码

#include <stdio.h>
#define SID_MASK_DEV_TYPE                   0x0FFF000000000000  ///<  sid mask:dev type
#define SID_MASK_DEV_SN_TYPE                0x0000FFF000000000  ///<  sid mask:dev sn
#define SID_MASK_SIGNAL_TYPE                0x0000000FF0000000  ///<  sid mask:signal type
#define SID_MASK_SIGNAL_VAR                 0x000000000FFF0000  ///<  sid mask:signal var
#define SID_MASK_SIGNAL_VINDEX              0x0000000000000FFF  ///<  sid mask:signal var index
#define SID_MASK_WITHOUT_SIGNAL_VINDEX      0xFFFFFFFFFFFFF000  ///<  sid mask:without signal var index
#define SID_MASK_JUST_DEV_TYPE_SN           0xFFFFFFF000000000  ///<  sid mask:without signal var index
#define SID_MASK_WITHOUT_SIGNAL_VAR_VINDEX  0xFFFFFFFFF0000000  ///<  sid mask:without signal var index
#define SID_MASK_WITHOUT_DEV_SN             0xFFFF000FFFFFFFFF  ///<  sid mask:without dev sn
#define SID_MASK_WITHOUT_SIGNAL_VAR         0xFFFFFFFFF000FFFF  ///<  sid mask:without signal var
#define SID_MASK_DEV_TYPE_AND_SIG_TYPE      0xFFFF000FF0000000  ///<  sid mask:dev type and signal type
#define SID_MASK_WITHOUT_DEV_SN_AND_SIG_VINDEX      0xFFFF000FFFFFF000  ///<  sid mask:without dev_sn sig_index

#define SID_MASK_ALL                 0xFFFFFFFFFFFFFFFF

#define OFFSET_DEV_TYPE       48  ///<  dev type offset
#define OFFSET_DEV_SN         36  ///<  dev sn offset
#define OFFSET_SIGNAL_TYPE    28  ///<  signal type offset
#define OFFSET_SIGNAL_VAR     16  ///<  signal var offset
#define OFFSET_SIGNAL_VINDEX  0   ///<  signal vindex offset

#define SID_GET_DEV_TYPE(signal_id)       \
        ((signal_id&SID_MASK_DEV_TYPE) >> OFFSET_DEV_TYPE)            ///< 48

#define SID_GET_DEV_SN(signal_id)         \
        ((signal_id&SID_MASK_DEV_SN_TYPE) >> OFFSET_DEV_SN)           ///<  36

#define SID_GET_DEV_TYPE_SN(signal_id)       \
        ((signal_id&SID_MASK_JUST_DEV_TYPE_SN) >> OFFSET_DEV_SN)      ///<  36

#define SID_GET_SIGNAL_TYPE(signal_id)    \
        ((signal_id&SID_MASK_SIGNAL_TYPE) >> OFFSET_SIGNAL_TYPE)      ///< 28

#define SID_GET_SIGNAL_VAR(signal_id)     \
        ((signal_id&SID_MASK_SIGNAL_VAR) >> OFFSET_SIGNAL_VAR)        ///<  16

#define SID_GET_SIGNAL_VINDEX(signal_id)  \
        ((signal_id&SID_MASK_SIGNAL_VINDEX) >> OFFSET_SIGNAL_VINDEX) //0 

int main () {
    char  buffer [33]; 
    unsigned long long signal_id = 563020820447233;
    // sprintf(buffer,"%x",signal_id);
    // printf("16进制 signal_id: %d\n", buffer)
	printf("device type: %d\n", SID_GET_DEV_TYPE(signal_id));
    printf("device sn: %d\n", SID_GET_DEV_SN(signal_id));
    printf("device type sn: %d\n", SID_GET_DEV_TYPE_SN(signal_id));
    printf("signal type: %d\n", SID_GET_SIGNAL_TYPE(signal_id));
    printf("signal var: %d\n", SID_GET_SIGNAL_VAR(signal_id));
    printf("signal var index: %d\n", SID_GET_SIGNAL_VINDEX(signal_id));
	return 0;
}