1. 把内存里十六进制字符串转为整数
int HexToInt(const char* pstr_str,int li_len)
{
char s[4];
int i, x=li_len-1;
if(li_len >4 || li_len < 1)
{
return -1;
}
memset(s,0,4);
for (i=0;i<li_len;i++)
{
memcpy(&s[i],&pstr_str[x],1);
x--;
}
x=0;
memcpy(&x,s,4);
return x;
}
2.十六进制转换为字符串
int HexToStr(unsigned const char *pstr_HexData,const int Length,char *pstr_StrData)
{
int i=0;
unsigned char lz_tmp[4];
for(i=0;i<Length;i++)
{
memset(lz_tmp,0,2);
sprintf(lz_tmp,"%02X",pstr_HexData[i]);
strcat(pstr_StrData,lz_tmp);
}
return 0;
}
3.BCD进制转换成字符串
int BCDToASC(unsigned const char *pstr_BCDData,const int Length,char *pstr_ASCData)
{
int i=0;
unsigned char H,L;
unsigned char tmp[4];
for(i=0;i<Length;i++)
{
H=pstr_BCDData[i]&0x0F;
L=pstr_BCDData[i]&0xF0;
L=L>>4;
memset(tmp,0,4);
sprintf(tmp,"%0X",H);
strcat(pstr_ASCData,tmp);
if(L == 0xF)
{
break;
}
sprintf(tmp,"%0X",L);
strcat(pstr_ASCData,tmp);
}
return 0;
}
4.十六进制转换成ASC
int HexToASC(unsigned const char *pstr_HexData,const int Length,char *pstr_ASCData)
{
int i=0;
int li_val = 0;
char lz_tmp[3]={0};
for(i=0;i<Length;i++)
{
strncpy(lz_tmp,pstr_HexData+i,1);
li_val = HexToInt(lz_tmp,1);
pstr_ASCData[i] = (char)li_val;
}
return 0;
}
十六进制很大的时候,例如4200000000,这个时候转INT虽然可以成功,但数据不对。
//调用strtol系统函数,转换成Unsigned long类型
void hexToDec(char *a, unsigned long* x)
{ *x = strtol(a, (char**)NULL, 16);}
unsigned long HexToLong(const char* pstr_str,int li_len)
{
char s[33];
char c_temp[3]={0};
long i, x;
unsigned long value=0;
int m=li_len-1;
char lz_part[9]={0};
int len;
char logMessage[256]={0};
char sourceStr[9]={0};
if(li_len >4 || li_len < 1)
{
return -1;
}
memset(s,0,33);
HexToStr(pstr_str,li_len,sourceStr);
hexToDec(sourceStr,&value);
return value;