Here is a simple reduced version of sscanf I wrote years ago. Hope it helps!
// // Reduced version of scanf (%d, %x, %c, %n are supported) // %d dec integer (E.g.: 12) // %x hex integer (E.g.: 0xa0) // %b bin integer (E.g.: b1010100010) // %n hex, de or bin integer (e.g: 12, 0xa0, b1010100010) // %c any character // int rsscanf(const char* str, const char* format, ...) { va_list ap; int value, tmp; int count; int pos; char neg, fmt_code; const char* pf;
va_start(ap, format);
for (pf = format, count = 0; *format != 0 && *str != 0; format++, str+
+) { while (
*format == ' ' && *format != 0) format++; if (
*format == 0) break;
while (*str == ' ' && *str != 0) str++; if (*str == 0) break;
if (*format == '%') { format++; if (*format == 'n') { if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) { fmt_code = 'x'; str += 2; } else if (str[0] == 'b') { fmt_code = 'b'; str++; } else fmt_code = 'd'; } else fmt_code = *format;
switch (fmt_code) { case 'x': case 'X': for (value = 0, pos = 0; *str != 0; str++, pos++) { if ('0'