socket编程必备函数:字节序转换C++模板函数,一劳永逸地代替ntoh或hton等函数

socket编程必备函数:贡献一个使用C++模板写的字节序转换函数,一劳永逸地代替ntoh或hton等函数,而且还不用管整形的长度,想怎么用就怎么用,不会用错。
这么好的东西是不是可以考虑将这个函数纳入C++标准库啊?


//判断是否大端字节序
bool IsBigEndianOrder()
{
    int iVal = 1;
    char *pChar = (char*)(&iVal);
    if(*pChar==1) return false; //(0x01000000) Windows 采用的是小端法
    else return true; //(0x00000001)  Aix采用的是大端法
}




//在本机字节序与网络字节序之间转换,正反都是使用该同一个函数
template<class IntType> IntType ntoh_or_hton(IntType nValue)
{
IntType iResult = 0;
int  iIntTypeSize = sizeof(IntType);  //整形的长度


unsigned char* psInput = (unsigned char*)&nValue;
unsigned char* psResult = (unsigned char*)&iResult;
if(!IsBigEndianOrder())  //需要转换
{
for(int i=0; i<iIntTypeSize; ++i)
{
psResult[iIntTypeSize-1-i] = psInput[i];
}
return iResult;
}
else //不需要转换

return nValue;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值