概述:
在工作中,我们可能会遇到对接平台是二进制的一个协议,如果我们换了平台或者换了修改地址,可能就会某些偏移不对,导致协议不对或者保存的数据出问题,这里简单介绍一个C语言函数,打印出每个变量相对于结构体开始的偏移地址。这样可以快速找到定位问题,如果自己去计算,在结构题很复杂的情况下很可能会出问题,也太麻烦。
废话不多说,直接上demo:
#include <stdio.h>
#include <stddef.h>
#ifndef offsetof
#define offsetof(type, member) ((long) &((type *) 0)->member)
#endif
typedef struct {
short t;
char t1;
int t2;
char t3;
int t4;
}TEST_T;
typedef struct {
int a;
char b;
TEST_T c;
int d;
}TESTSTR;
#define skyprt(x) printf(#x"===========%lu\n", offsetof(TESTSTR, x));
int main()
{
skyprt(a);
skyprt(b);
skyprt(c);
skyprt(d);
printf("skyj=============TESTSTR size = %lu\n", sizeof(TESTSTR));
}
编译打印我们就可以看到每个元素相对开始的偏移位置:
sky@ubuntu:~/test/offset$ ./offset
a===========0
b===========4
c===========8
d===========24
skyj=============TESTSTR size = 28
最后:
在实际使用中去使用,才会发现有些工具可以让你工作效率提高。