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;
}
}