从十六进制字符串转换为十六进制字符数

时间:2017-08-07 17:50:06

标签: c++ arrays string

我有字符串十六进制。 std :: string x =" 68656c6c6f" ; 我想将它转换为字符数组 数组中的每个元素都是2个十六进制数 恩。

char c[5]={0x68,0x65,0x6c,0x6c,0x6f} ;

我使用的是c ++,而且我已经有了十六进制数字的字符串,而且我没有选择将值作为字符数组读取。 我无法使用scanf("%x",&c[i]);

1 个答案:

答案 0 :(得分:0)

C(也适用于C ++)

int cnvhex(const char *num, int *table)
{
    const char *ptr;
    int index = (num == NULL || table == NULL) * -1;


    size_t len = strlen(num);

    ptr = num + len - 2;
    if (!index)
    {
        for (index = 0; index < len / 2; index++)
        {
            char tmp[3] = { 0, };

            strncpy(tmp, ptr, 2);
            if (sscanf(tmp, "%x", table + index) != 1)
            {
                index = -1;
                break;
            }
            ptr -= 2;
        }
        if (index != -1 && (len & 1))
        {
            char tmp[2] = { *num, 0};

            if(sscanf(tmp, "%x", table + index++) != 1) index = -1;
        }
    }
    return index;
}