1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
# ifndef UTIL_ENDIAN_H
# define UTIL_ENDIAN_H
# include <stdio.h>
/************************************************************************/
/* */
/* Pieces of 'endian' subroutines that are used internally in the code */
/* */
/* b0 is the most significant byte, b1/b3 the least significant. */
/* */
/************************************************************************/
# define NEGBYTES32(b3,b2,b1,b0,l) \
l= -( l+ 1 ); \
b3= 255- ( l % 256 ); l /= 256; \
b2= 255- ( l % 256 ); l /= 256; \
b1= 255- ( l % 256 ); l /= 256; \
b0= 255- ( l );
# define POSBYTES32(b3,b2,b1,b0,l) \
b3= l % 256; l /= 256; \
b2= l % 256; l /= 256; \
b1= l % 256; l /= 256; \
b0= l;
# define NEGBYTES16(b1,b0,l) \
l= -( l+ 1 ); \
b1= 255- ( l % 256 ); l /= 256; \
b0= 255- ( l );
# define POSBYTES16(b1,b0,l) \
b1= l % 256; l /= 256; \
b0= l;
# define NEGVALUE32(b0,b1,b2,b3,l,t) \
l = ( (t)b0- 255 )* 256* 256* 256; \
l += ( (t)b1- 255 )* 256* 256; \
l += ( (t)b2- 255 )* 256; \
l += ( (t)b3- 255 ); \
l--;
# define POSVALUE32(b0,b1,b2,b3,l,t) \
l = ( (t)b0 )* 256* 256* 256; \
l += ( (t)b1 )* 256* 256; \
l += ( (t)b2 )* 256; \
l += ( (t)b3 );
# define NEGVALUE16(b0,b1,l,t) \
l = ( (t)b0- 255 )* 256; \
l += ( (t)b1- 255 ); \
l--;
# define POSVALUE16(b0,b1,l,t) \
l = ( (t)b0 )* 256; \
l += ( (t)b1 );
/************************************************************************/
/* */
/* Routine declarations. */
/* */
/************************************************************************/
extern int utilGetLeInt16(FILE *);
extern long utilGetLeInt32(FILE *);
extern unsigned int utilGetLeUint16(FILE *);
extern unsigned long utilGetLeUint32(FILE *);
extern int utilGetBeInt16(FILE *);
extern long utilGetBeInt32(FILE *);
extern unsigned int utilGetBeUint16(FILE *);
extern unsigned long utilGetBeUint32(FILE *);
extern void utilPutLeInt16(int, FILE *);
extern void utilPutLeInt32(long, FILE *);
extern void utilPutLeUint16(unsigned int, FILE *);
extern void utilPutLeUint32(unsigned long, FILE *);
extern void utilPutBeInt16(int, FILE *);
extern void utilPutBeInt32(long, FILE *);
extern void utilPutBeUint16(unsigned int, FILE *);
extern void utilPutBeUint32(unsigned long, FILE *);
long utilEndianExtractLeInt32( const unsigned char * s );
int utilEndianExtractLeInt16( const unsigned char * s );
long utilEndianExtractBeInt32( const unsigned char * s );
int utilEndianExtractBeInt16( const unsigned char * s );
unsigned long utilEndianExtractLeUint32( const unsigned char * s );
unsigned int utilEndianExtractLeUint16( const unsigned char * s );
unsigned long utilEndianExtractBeUint32( const unsigned char * s );
unsigned int utilEndianExtractBeUint16( const unsigned char * s );
extern void utilEndianStoreBeInt32( long l, unsigned char * b );
extern void utilEndianStoreLeInt32( long l, unsigned char * b );
extern void utilEndianStoreBeInt16( int i, unsigned char * b );
extern void utilEndianStoreLeInt16( int i, unsigned char * b );
# endif /* UTIL_ENDIAN_H */
|