十六進制字符串轉換爲ascii字符串

char *AsciiToChar(char *asc,char str[]) //只轉換大寫
{
 int i=0,n=0,len;
 char cTemp[1024];
 memset(cTemp,0x00,sizeof(cTemp));
 strcpy(cTemp,asc);
 len=strlen(cTemp);
 for(i=0;i<len;i+=2)
 {
  if(('0'<=cTemp[i]&&cTemp[i]<='9')&&('0'<=cTemp[i+1]&&cTemp[i+1]<='9'))
   str[n++]=(char)(cTemp[i]<<4|(cTemp[i+1]&0x0F));
  else if('0'<=cTemp[i]&&cTemp[i]<='9'&&('A'<=cTemp[i+1]&&cTemp[i+1]<='F')
   )
   str[n++]=(char)(cTemp[i]<<4|(cTemp[i+1]-0x37));
  else if(('A'<=cTemp[i]&&cTemp[i]<='F')&&('0'<=cTemp[i+1]&&cTemp[i+1]<='9'))
   str[n++]=(char)(((cTemp[i]-0x37)<<4)|(cTemp[i+1]&0x0F));
  else if(('A'<=cTemp[i]&&cTemp[i]<='F')&&('A'<=cTemp[i+1]&&cTemp[i+1]<='F'))
   str[n++]=(char)(((cTemp[i]-0x37)<<4)|(cTemp[i+1]-0x37));
  else
   printf("your input is wronghttp://www.jozzz.com/http://www.51banyun.com!!");
 }
 str[n]='\0';
 return str;
}

 

 

test:

 

int main()
{
char strin[1024];
int i;
memset(strin,0x00,sizeof(strin));
printf("%s\n",AsciiToChar("3132333435D6D0B6ABD6D0",strin));
exit(0);
}

 

unsigned char* hexStrToAsciiStr(unsigned char* din, unsigned char *dout, int len)
{
 int i;
 int c = 0;

 for (i = 0; i < len; i += 2)
 {
  sscanf((const char *)din + i, "%02X", &c);
  dout[i/2] = (unsigned char)(c & 0xFF);
 }
 return dout;
}

 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章