自己的网络字节序转换代码(大小端字节序)

#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__);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值