/*For example*Hex String: * unsigned char *src="0a0b0c0d"*Converted String: * unsigned char *des={0x0a,0x0b,0x0c,0x0d}*Reference:* http://bdn.borland.com/article/0,1410,17203,00.html*/
#include "stdafx.h"#include <iostream.h>#include <string.h>
int axtoi(char *hexStg) { int n = 0; // position in string int m = 0; // position in digit[] to shift int count; // loop index int intValue = 0; // integer value of hex string int digit[5]; // hold values to convert while (n < 4) { if (hexStg[n]=='/0') break; if (hexStg[n] > 0x29 && hexStg[n] < 0x40 ) //if 0 to 9 digit[n] = hexStg[n] & 0x0f; //convert to int else if (hexStg[n] >='a' && hexStg[n] <= 'f') //if a to f digit[n] = (hexStg[n] & 0x0f) + 9; //convert to int else if (hexStg[n] >='A' && hexStg[n] <= 'F') //if A to F digit[n] = (hexStg[n] & 0x0f) + 9; //convert to int else break; n++; } count = n; m = n - 1; n = 0; while(n < count) { // digit[n] is value of hex digit at position n // (m << 2) is the number of positions to shift // OR the bits into return value intValue = intValue | (digit[n] << (m << 2)); m--; // adjust the position to set n++; // next digit to process } return (intValue);}
void convert(char * src,long src_len,char * des,long *des_len)
{
char tempStr[4]={0};
*des_len=src_len>>2;
for(int i=0;i<(*des_len);i++)
{
strncpy(tempStr,src+i*2,2);
des[i] =(char)axtoi(tempStr);
}
}
int main() { char src[20]="01020304aa"; char supposed_des[10]={0x01,0x02,0x03,0x04,0xaa};
char des[10]={0}; long des_len=0;
convert(src,10,des,&des_len);
if(0==memcmp(des,supposed_des,des_len)) cout<<"Successful!"<<endl; else cout<<"Failed!/n"<<endl;
return 0;}