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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值