怎么将字符串转换成16进制的数据

如何将字符串转换成16进制的数据。
例如将char型的字符串数组“1B52001B74131B52001B7413”转换成16进制的0x1B 0x52 0x00 0x1B 0x74 0x13等等,并存放到一个数组中。

------解决方案--------------------
unsigned char _hex2dec(char h)
{
if(h >= 'A') {
h |= 0x20;
h -= 'a';
h += 10;
} else {
h -= '0';
}
return h;
}
unsigned char *convert_hex(char *input, int *output_len)
{
unsigned char *output, v;
int i,len;

len = strlen(input);
if(len % 2) {
return NULL;
}
output = (unsigned char*)malloc(len/2);
if(output == NULL) {
return NULL;
}
*output_len = len/2;
p = input;
for(i=0;i<len/2;i++) {
v = _hex2dec(*p++);
v <<= 4;
v ++ _hex2dec(*p++);
*output++ = v;
}
return output;
}
------解决方案--------------------
C/C++ code

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
    char str[] = "1B52001B74131B52001B7413";
    vector<string> v;
    string tmp = "0x";
    for(int i=0; i<strlen(str); (tmp+=str[i],(i+2)%2 != 0)?(v.push_back(tmp),tmp="0x"):tmp,i++);
    for (vector<string>::iterator iter = v.begin(); iter != v.end(); printf("%s\n",iter->c_str()) ,iter++);
    return 0;
}

------解决方案--------------------
C/C++ code
#include <string.h>
#include <stdio.h>
#include <conio.h>
#define MAX_BYTES 256
char str[] = "1B52001B74131B52001B7413";
unsigned char b[MAX_BYTES];
int i,n;
void main() {
    i=0;
    while (1) {
        if (1==sscanf(str+i*2,"%02x",b+i)) {
            i++;
            if (i>=MAX_BYTES) break;
        } else {
            break;
        }
    }
    n=i;
    for (i=0;i<n;i++) printf("%02X ",b[i]);
    printf("\ntotal %d bytes.\n",n);
    getch();
}