c语言中比较实用的转换函数

本文介绍如何将倒序的十六进制字符串转换为整数,并提供了将IP地址字符串与整型相互转换的方法。包括两个实用函数HexStrToInt和IPtoUlong,以及UlongtoIP,适用于网络编程中数据格式的转换。

一、十六进制倒序字符串转换成整型

/********************************************************
 * function: 	HexStrToInt
 * description:	将倒叙的16进制字符串转换成整形值
 * input:		
 	1.pbSrc		字符串,例如E8030000 代表值0x000003E8
 *	2.nLen:	 	字符串长度
 * output:		pbDest:
 * return:	 	整形值
 * auther:
 * other:	example:  E8030000 -> 0x000003E8(10进制值为1000)
*********************************************************/
int HexStrToInt(char *pbSrc, int nLen)
{
	char temp[20];
	int i = 0, index = 0;
	int len = 0;
	int value = 0;

	memset(temp, 0, sizeof(temp));
	len = strlen(pbSrc);
	for(i=len-1; i>=1; i-=2)
	{
		temp[index] = pbSrc[i-1];
		temp[index+1] = pbSrc[i];
		index += 2;
	}
	if (i == 0)
	{
		temp[index] = '0';
		temp[index+1] = pbSrc[0];
	}
	value = strtol(temp, NULL, 16);
	
	AU_LOGD(" src[%s] temp[%s] value[%d]", pbSrc, temp, value);
	return value;
}

二、ip地址字符串与整型互转

/*************************************************
  Function:    		IPtoUlong
  Description:		将IP地址字符串转化为long型IP地址
  Input:
  	1.ip			IP地址字符串
  Output:			
  Return:			转化后的unsigned long型IP地址
  Others:			例如:192.168.0.10 => 0xC0A8000A
*************************************************/
unsigned long IPtoUlong(char* ip)
{
	unsigned long uIp = 0;
	char *p, *q;
	char temp[10];
	int num;
	p = ip;
	for( ; ; )
	{
		q = (char *)strchr(p,'.');
		if (q == NULL)
		{
			break;
		}
		num = q - p;
		memset(temp, 0, 10);
		memcpy(temp, p, num);
		uIp = uIp << 8;
		uIp += atoi(temp);
		p=q+1;
	}
	uIp = uIp << 8;
	uIp += atoi(p);
	return uIp;
}

/*************************************************
  Function:    		UlongtoIP
  Description:		将long型IP地址转化为IP地址字符串
  Input:
  	1.uIp			unsigned long型IP地址
  Output:			
  Return:			转化后的字符串指针
  Others:			例如:0xC0A8000A  => 192.168.0.10
*************************************************/
char* UlongtoIP(unsigned long uIp)
{
	static char strIp[20];
	char temp[20];
	int i;
	unsigned long t;
	memset(strIp, 0, 20);
	for(i = 3; i >= 0; i--)
	{
		t = uIp >> (i * 8);
		t = t & 0xFF;
		sprintf(temp, "%d", (uint32)t);
		strcat(strIp, temp);
		if(i != 0)
		{
			strcat(strIp, ".");
		}
	}
	return strIp;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值