各种数据格式转换简单实现

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;

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值