преобразовать шестнадцатеричные строки в шестнадцатеричные байты без использования в c без библиотек - PullRequest
0 голосов
/ 06 июня 2019

У меня есть строка {F0A9B8BDE38182}
Мне нужно преобразовать его в шестнадцатеричные байты

0xF0 0xA9 0xB8 0xBD 0xE3 0x81 0x82

Я могу получить ответ с кодом ниже

for (i = 0; i < (str_len /2); i++)
{
    sscanf(hexstring + 2*i, "%02x", &bytearray[i]);
    printf("bytearray %d: %02x\n", i, bytearray[i]);
}

но мне нужно без использования sscanf

1 Ответ

4 голосов
/ 06 июня 2019

Вам необходимо преобразовать отдельную ASCII в соответствующую HEX цифру, а затем использовать | для формирования полной byte.

Пример:

   for (i = 0; i < strlen(s)/2; i++)
    {
       bytearray[i] = AsciiToHex(s[2*i])<<4 | AsciiToHex(s[2*i+1]);
       printf("bytearray %d: %02X\n", i, bytearray[i]);
    }

    uint8_t AsciiToHex(char c){

       if (c >= '0' && c<='9') return c - '0';
       else if (c >= 'A' && c <= 'F') return 10 + c - 'A';
       else return 0;
    }
...