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