Преобразовать строку из argv в массив байтов без знака - PullRequest
0 голосов
/ 26 декабря 2018

Например, мне нужен

unsigned code[] {
    0x0001, 
    0x0002, 
    0x0003, 
    .. and so on
}

из argv.Я хотел бы ввести его в виде потока, как это:

000100020003 and so on

1 Ответ

0 голосов
/ 26 декабря 2018
unsigned hextodigit(int hex)
{
    unsigned result = 0;

    switch(toupper(hex))
    {
        case '0':
            return 0;
            break;
        case '1':
            return 1;
            break;
        case '2':
            return 2;
            break;
        case '3':
            return 3;
            break;
        case '4':
            return 4;
            break;
        case '5':
            return 5;
            break;
        case '6':
            return 6;
            break;
        case '7':
            return 7;
            break;
        case '8':
            return 8;
            break;
        case '9':
            return 9;
            break;
        case 'A':
            return 10;
            break;
        case 'B':
            return 11;
            break;
        case 'C':
            return 12;
            break;
        case 'D':
            return 13;
            break;
        case 'E':
            return 14;
            break;
        case 'F':
            return 15;
            break;
        default:
            break;
    }
}


unsigned fromhex4chars(const char *str)
{
    return hextodigit(*(str + 3)) + (hextodigit(*(str + 2)) << 4) + (hextodigit(*(str + 1)) << 8) + (hextodigit(*str) << 12);    
}

void convert(const char *str, unsigned *buff)
{
    size_t len = strlen(str)  / 4;

    while(len--)
    {
        *buff++ = fromhex4chars(str);
        str += 4;
    }
}

int main(int argc, char **argv)
{
    unsigned x[100];

    convert(argv[1], x);


    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...