我们知道,内存中的数据分为大端模式和小端模式,有时候我们把数据写进内存,我们可能不确定它是按照大端模式还是小端模式存的,除非我们写个小代码先验证一下(这里就不介绍怎么验证了),所以读出来可能就不是我们存进去的值了。这里介绍一种读写方式,是我在写代码过程中遇到的,本来是要用我自己的策略来存取的,但是被告知有这个宏,很开心拿来用了,按照这种方式,就可以解决我们的困扰了。在这里分享给大家。本人刚入行菜鸟,如果有不足的地方,请大神们指正
大端模式写内存:
#define write_int_big_endian_4b(_buf, _i_value) \
do{\((unsigned char*)(_buf))[0] = (unsigned char)(((_i_value) >> 24) & 0xff);\
((unsigned char*)(_buf))[1] = (unsigned char)(((_i_value) >> 16) & 0xff);\
((unsigned char*)(_buf))[2] = (unsigned char)(((_i_value) >> 8) & 0xff);\
((unsigned char*)(_buf))[3] = (unsigned char)((_i_value) & 0xff);\
}while(0)
大端模式读内存:
#define read_int_big_endian_4b(_buf) ((((unsigned)(((unsigned char*)(_buf))[0])) << 24) \
| (((unsigned)(((unsigned char*)(_buf))[1])) << 16) \
| (((unsigned)(((unsigned char*)(_buf))[2])) << 8) \
| (((unsigned)(((unsigned char*)(_buf))[3])) << 0))
小端模式读内存:
#define read_int_little_endian_4b(_buf)((((unsigned)(((unsigned char*)(_buf))[0])) << 0) \
| (((unsigned)(((unsigned char*)(_buf))[1])) << 8) \
| (((unsigned)(((unsigned char*)(_buf))[2])) << 16) \
| (((unsigned)(((unsigned char*)(_buf))[3])) << 24))
小端模式写内存:
#define write_int_little_endian_4b(_buf, _i_value) \
do{\
((unsigned char*)(_buf))[0] = (unsigned char)((_i_value) & 0xff);\
((unsigned char*)(_buf))[1] = (unsigned char)(((_i_value) >> 8) & 0xff);\
((unsigned char*)(_buf))[2] = (unsigned char)(((_i_value) >> 16) & 0xff);\
((unsigned char*)(_buf))[3] = (unsigned char)(((_i_value) >> 24) & 0xff);\
}while(0)