ファイルから読み取った16進数の文字列をバイナリ形式(数値)に変換する方法

メモ
16進数のテキスト文字で書かれたファイルを読み込んで、
バイナリデータに変換する必要があったので、適当に作ってみた関数。
0xFF形式のみ、拾い上げて、数値に変更するだけ。

char* my_strcpy(const char* str)
{
    char* p = (char*)malloc(strlen(str)+1);
    if(p == NULL) return NULL;

    strcpy(p,str);
    return p;
}

void str2hex(char* str)
{
    unsigned int ui;
    char *s = my_strcpy(str);
    char *h = s;
    char *p = str;
    unsigned char us[5] = {0,0,0,0,0};

    for (; s[0] != '\0'; s++){
        if (strlen(s) >= 4) {
            if ( s[0] == '0' &&
                toupper(s[1]) == 'X' && 
                isxdigit(s[2]) &&
                isxdigit(s[3]) ) {

                memcpy(us, s, 4);
                p[0] = strtol(us, NULL, 16);
                s += 3;
                p++;
            }
        }
    }
    p[0]='\0';

    free(h);
}