#include <stdio.h>
#define BIGENDIAN 1
#define LITTLEENDIAN 0
//定义16、32、64位的调位函数。这里就是字节“搬家”而已。
#define SWAP16(s) ((((s)&0xff)<<8)|(((s)>>8)&0xff))
#define SWAP32(l) (((l)>>24) |\
(((l)&0x00ff0000)>>8) |\
(((l)&0x0000ff00)<<8) |\
((l)<<24))
#define SWAP64(ll) (((ll)>>56) |\
(((ll)&0x00ff000000000000)>>40) |\
(((ll)&0x0000ff0000000000)>>24) |\
(((ll)&0x000000ff00000000)>>8) |\
(((ll)&0x00000000ff000000)<<8) |\
(((ll)&0x0000000000ff0000)<<24) |\
(((ll)&0x000000000000ff00)<<40) |\
((ll)<<56))
static int bigEndianTest()
{
union
{
int a;
char b;
}c;
c.a=1;
if(c.b==1)
return LITTLEENDIAN;
else
return BIGENDIAN;
}
unsigned int a=0x1122;
#define BigEndian_16(s) bigEndianTest() ? s : SWAP16(s)
#define LittleEndian_16(s) bigEndianTest() ? SWAP16(s) : s
#define BigEndian_32(l) bigEndianTest() ? l : SWAP32(l)
#define LittleEndian_32(l) bigEndianTest() ? SWAP32(l) : l
#define BigEndian_64(ll) bigEndianTest() ? ll : SWAP64(ll)
#define LittleEndian_64(ll) bigEndianTest() ? SWAP64(ll) : ll
void main()
{
if(LITTLEENDIAN==bigEndianTest())
;
BigEndian_16(a);
printf("%x\n",a);
unsigned long int b=0x12345678;
printf("%x\n",SWAP32(b));
long long int c=0x0123456789abcdef;
printf("%llx\n",SWAP64(c));
printf("%s\n",__FUNCTION__);
}
#define BIGENDIAN 1
#define LITTLEENDIAN 0
//定义16、32、64位的调位函数。这里就是字节“搬家”而已。
#define SWAP16(s) ((((s)&0xff)<<8)|(((s)>>8)&0xff))
#define SWAP32(l) (((l)>>24) |\
(((l)&0x00ff0000)>>8) |\
(((l)&0x0000ff00)<<8) |\
((l)<<24))
#define SWAP64(ll) (((ll)>>56) |\
(((ll)&0x00ff000000000000)>>40) |\
(((ll)&0x0000ff0000000000)>>24) |\
(((ll)&0x000000ff00000000)>>8) |\
(((ll)&0x00000000ff000000)<<8) |\
(((ll)&0x0000000000ff0000)<<24) |\
(((ll)&0x000000000000ff00)<<40) |\
((ll)<<56))
static int bigEndianTest()
{
union
{
int a;
char b;
}c;
c.a=1;
if(c.b==1)
return LITTLEENDIAN;
else
return BIGENDIAN;
}
unsigned int a=0x1122;
#define BigEndian_16(s) bigEndianTest() ? s : SWAP16(s)
#define LittleEndian_16(s) bigEndianTest() ? SWAP16(s) : s
#define BigEndian_32(l) bigEndianTest() ? l : SWAP32(l)
#define LittleEndian_32(l) bigEndianTest() ? SWAP32(l) : l
#define BigEndian_64(ll) bigEndianTest() ? ll : SWAP64(ll)
#define LittleEndian_64(ll) bigEndianTest() ? SWAP64(ll) : ll
void main()
{
if(LITTLEENDIAN==bigEndianTest())
;
BigEndian_16(a);
printf("%x\n",a);
unsigned long int b=0x12345678;
printf("%x\n",SWAP32(b));
long long int c=0x0123456789abcdef;
printf("%llx\n",SWAP64(c));
printf("%s\n",__FUNCTION__);
}