Как найти в строке шестнадцатеричное число? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Упакованная строка, содержащая символьное представление шестнадцатеричных чисел. //Все символы строки, кроме цифр, помещаются в последовательность в исходном виде. //Последовательность цифр преобразуется в целую переменную, которая записывается в упакованную строку, //предваренная символом \0. //Конец строки - два подряд идущих символа \0. Пример:для шестнадцатеричных чисел. //- исходная строка : "aa0x24FFbbb0xAA65" //- упакованная строка : 'a' 'a''\0' 0x24FF 'b' 'b' 'b' '\0' 0xAA65 '\0' '\0'
#define LEN 11
void getData(char * str)
{
    printf("Введите последовательность(не более %d) буквенно-числовых символов:\n", LEN - 1);
    fgets(str, LEN, stdin);
}
void strPack(char * str)
{
    char   packstr[256] = "";//строка для упаковки
    int    num = 0;
    while (1)
    {
        if (isalpha(*str))
        {
            num = 0;
            sprintf(packstr + strlen(packstr), "'%c'", *str);
        }
        else if //как сказать что следующие значения-шестнадцатеричное число и вывести его?
        }
        if (!*str++)
        {
            sprintf(packstr + strlen(packstr), "'\\0''\\0'");
            break;
        }
    }
    puts(packstr);
}
void main()
{
    setlocale(0, "RUS");
    char str[LEN];
    getData(str);
    strPack(str);
    system("Pause");
}

Решение задачи: «Как найти в строке шестнадцатеричное число?»

textual
Листинг программы
#include <stdio.h>
 
int parse_hex(const char* s, unsigned int* h){
    const char*  p;
    unsigned int n;
    if((*s != '0') || ((*(s + 1) & 0xDF) != 'X'))
        return 0;
    
    for(n = 0, p = s + 2; *p; ++p){
        if(*p >= '0' && *p <= '9')
            n = (n << 4) | (unsigned int)(*p - '0');
        else if(*p >= 'A' && *p <= 'F')
            n = (n << 4) | (unsigned int)(*p - 'A' + 10);
        else
            break;
    }
 
    //проверка на переполнение
    if(((int)(p - s) - 2) > (int)(sizeof(n) << 1))
        return 0;
 
    *h = n;
    return (p != s + 2) ? (int)(p - s) : 0;
}
 
int main(void){
    int i;
    unsigned int n;
    const char*  p;
 
    char s[] = "0xDF, 0xABCDEF (0x12345678) 0x70D01-0xDDE. s0x24FFax i0xE";
 
    for(p = s; *p; ){
        i = parse_hex(p, &n);
        if(i > 0){
            printf("0x%X\n", n);
            p += i;
        } else
            ++p;
    }
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы