C语言如何实现把string类型的FTP地址进行转换?

已知如下信息:

63766E6176693B” //ftp 用户名+;(ftp 各参数间用 3B,即半角分号;做分割)
“73686968616E6740323031393B” //ftp 密码 + ;
”3131372E37342E3133362E33343B“ //ftp 地址 + ;
“32313B” //ftp 端口号 + ;
”3037323946344236344D4D48455430365639 “//下发的文件名不含“.bin”,而 ftp 服务器上的文件含有“.bin”后缀,需要终端从 ftp 获取文件时添加“.bin”后 缀

如何用C语言实现把上述hex信息解析对应的FTP地址、端口、用户名等十进制消息?


#include <stdlib.h>
#include <string.h>

int hextodec(char *hex)
{
    int sum = 0, t, i;

    for(i = 0; i < 2; i++, hex++)
    {
        if(*hex >= 'A' && *hex <= 'F')
            t = *hex - 'A' + 10;
        else
            t = *hex - '0';

        if(i == 0)
            sum += t * 16;
        else
            sum += t;
    }

    return sum;
}

void convert(char *dst, char *src)
{
    int i = 0, len, t;
    char ch[2];
    len = strlen(src);

    if(len % 2 != 0)
    {
        printf("源字符串格式错误\n");
        return;
    }

    while(1)
    {
        ch[0] = *src++;
        ch[1] = *src++;
        t = hextodec(ch);

        if(t == 0x3b || i > len - 2)
        {
            *dst = '\0';
            return;
        }

        *dst = t;
        dst++;
        i += 2;
    }
}

int main()
{
    char name[5][80] = {"63766E6176693B", "73686968616E6740323031393B", "3131372E37342E3133362E33343B", "32313B", "3037323946344236344D4D48455430365639"};
    char buf[100];

    for(int i = 0; i < 5 ; i++)
    {
        convert(buf, name[i]);
        printf("%s\n", buf);
    }

    return 0;
}