31 lines · 919 B · C
RawDownload
/* To read 16 bit and 32 bit words when they are not aligned */ #ifndef _unaligned_#define _unaligned_  #ifdef ALIGNMENT #define s16(p) (int) ((((schar *) (p))[1] << 8) + ((unsigned char *) (p))[0])#define u16(p) (unsigned int) ((((unsigned char *) (p))[1] << 8) \               + ((unsigned char *) (p))[0])#define s32(p) (int32) ((((schar *) (p))[3] << 24) \               + (((unsigned char *) (p))[2] << 16) \               + (((unsigned char *) (p))[1] << 8) \               + ((unsigned char *) (p))[0])#define u32(p) (uint32) ((((unsigned char *) (p))[3] << 24) \               + (((unsigned char *) (p))[2] << 16) \               + (((unsigned char *) (p))[1] << 8) \               + ((unsigned char *) (p))[0]) #else #define s16(p) (* (short *) (p))#define u16(p) (* (unsigned short *) (p))#define s32(p) (* (int32 *) (p))#define u32(p) (* (uint32 *) (p)) #endif  #endif /* _unaligned_ */