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

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

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

Упакованная строка, содержащая символьное представление шестнадцатеричных чисел. //Все символы строки, кроме цифр, помещаются в последовательность в исходном виде. //Последовательность цифр преобразуется в целую переменную, которая записывается в упакованную строку, //предваренная символом \0. //Конец строки - два подряд идущих символа \0. Пример:для шестнадцатеричных чисел. //- исходная строка : "aa0x24FFbbb0xAA65" //- упакованная строка : 'a' 'a''\0' 0x24FF 'b' 'b' 'b' '\0' 0xAA65 '\0' '\0'
Листинг программы
  1. #define LEN 11
  2. void getData(char * str)
  3. {
  4. printf("Введите последовательность(не более %d) буквенно-числовых символов:\n", LEN - 1);
  5. fgets(str, LEN, stdin);
  6. }
  7. void strPack(char * str)
  8. {
  9. char packstr[256] = "";//строка для упаковки
  10. int num = 0;
  11. while (1)
  12. {
  13. if (isalpha(*str))
  14. {
  15. num = 0;
  16. sprintf(packstr + strlen(packstr), "'%c'", *str);
  17. }
  18. else if //как сказать что следующие значения-шестнадцатеричное число и вывести его?
  19. }
  20. if (!*str++)
  21. {
  22. sprintf(packstr + strlen(packstr), "'\\0''\\0'");
  23. break;
  24. }
  25. }
  26. puts(packstr);
  27. }
  28. void main()
  29. {
  30. setlocale(0, "RUS");
  31. char str[LEN];
  32. getData(str);
  33. strPack(str);
  34. system("Pause");
  35. }

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

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. int parse_hex(const char* s, unsigned int* h){
  4.     const char*  p;
  5.     unsigned int n;
  6.     if((*s != '0') || ((*(s + 1) & 0xDF) != 'X'))
  7.         return 0;
  8.    
  9.     for(n = 0, p = s + 2; *p; ++p){
  10.         if(*p >= '0' && *p <= '9')
  11.             n = (n << 4) | (unsigned int)(*p - '0');
  12.         else if(*p >= 'A' && *p <= 'F')
  13.             n = (n << 4) | (unsigned int)(*p - 'A' + 10);
  14.         else
  15.             break;
  16.     }
  17.  
  18.     //проверка на переполнение
  19.     if(((int)(p - s) - 2) > (int)(sizeof(n) << 1))
  20.         return 0;
  21.  
  22.     *h = n;
  23.     return (p != s + 2) ? (int)(p - s) : 0;
  24. }
  25.  
  26. int main(void){
  27.     int i;
  28.     unsigned int n;
  29.     const char*  p;
  30.  
  31.     char s[] = "0xDF, 0xABCDEF (0x12345678) 0x70D01-0xDDE. s0x24FFax i0xE";
  32.  
  33.     for(p = s; *p; ){
  34.         i = parse_hex(p, &n);
  35.         if(i > 0){
  36.             printf("0x%X\n", n);
  37.             p += i;
  38.         } else
  39.             ++p;
  40.     }
  41.     return 0;
  42. }

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


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

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

9   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы