Как найти в строке шестнадцатеричное число? - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д