#include <stdio.h>
#define SID_MASK_DEV_TYPE 0x0FFF000000000000
#define SID_MASK_DEV_SN_TYPE 0x0000FFF000000000
#define SID_MASK_SIGNAL_TYPE 0x0000000FF0000000
#define SID_MASK_SIGNAL_VAR 0x000000000FFF0000
#define SID_MASK_SIGNAL_VINDEX 0x0000000000000FFF
#define SID_MASK_WITHOUT_SIGNAL_VINDEX 0xFFFFFFFFFFFFF000
#define SID_MASK_JUST_DEV_TYPE_SN 0xFFFFFFF000000000
#define SID_MASK_WITHOUT_SIGNAL_VAR_VINDEX 0xFFFFFFFFF0000000
#define SID_MASK_WITHOUT_DEV_SN 0xFFFF000FFFFFFFFF
#define SID_MASK_WITHOUT_SIGNAL_VAR 0xFFFFFFFFF000FFFF
#define SID_MASK_DEV_TYPE_AND_SIG_TYPE 0xFFFF000FF0000000
#define SID_MASK_WITHOUT_DEV_SN_AND_SIG_VINDEX 0xFFFF000FFFFFF000
#define SID_MASK_ALL 0xFFFFFFFFFFFFFFFF
#define OFFSET_DEV_TYPE 48
#define OFFSET_DEV_SN 36
#define OFFSET_SIGNAL_TYPE 28
#define OFFSET_SIGNAL_VAR 16
#define OFFSET_SIGNAL_VINDEX 0
#define SID_GET_DEV_TYPE(signal_id) \
((signal_id&SID_MASK_DEV_TYPE) >> OFFSET_DEV_TYPE)
#define SID_GET_DEV_SN(signal_id) \
((signal_id&SID_MASK_DEV_SN_TYPE) >> OFFSET_DEV_SN)
#define SID_GET_DEV_TYPE_SN(signal_id) \
((signal_id&SID_MASK_JUST_DEV_TYPE_SN) >> OFFSET_DEV_SN)
#define SID_GET_SIGNAL_TYPE(signal_id) \
((signal_id&SID_MASK_SIGNAL_TYPE) >> OFFSET_SIGNAL_TYPE)
#define SID_GET_SIGNAL_VAR(signal_id) \
((signal_id&SID_MASK_SIGNAL_VAR) >> OFFSET_SIGNAL_VAR)
#define SID_GET_SIGNAL_VINDEX(signal_id) \
((signal_id&SID_MASK_SIGNAL_VINDEX) >> OFFSET_SIGNAL_VINDEX)
int main () {
char buffer [33];
unsigned long long signal_id = 563020820447233;
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;
}