一、十六进制倒序字符串转换成整型
/********************************************************
* 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;
}
本文介绍如何将倒序的十六进制字符串转换为整数,并提供了将IP地址字符串与整型相互转换的方法。包括两个实用函数HexStrToInt和IPtoUlong,以及UlongtoIP,适用于网络编程中数据格式的转换。
876

被折叠的 条评论
为什么被折叠?



