/* * Convert a byte array into an hex string. */ static void mem2hex(void *vdst, void *vsrc, int len) { u_char *dst = vdst; u_char *src = vsrc; while (len--) { *dst++ = i2digit(*src >> 4); *dst++ = i2digit(*src++); } *dst = '\0'; }
/* * Send a packet. */ static void kgdb_send(const u_char *bp) { const u_char *p; u_char csum, c; DPRINTF(("kgdb_send: %s\n", bp)); do { p = bp; PUTC(KGDB_START); for (csum = 0; (c = *p); p++) { PUTC(c); csum += c; } PUTC(KGDB_END); PUTC(i2digit(csum >> 4)); PUTC(i2digit(csum)); } while ((c = GETC() & 0x7f) == KGDB_BADP); }
/* * Send a packet. */ static void kgdb_send(u_char *bp) { u_char *p; u_char csum, c; #ifdef DEBUG_KGDB printf("kgdb_send: %s\n", bp); #endif do { p = bp; PUTC(KGDB_START); for (csum = 0; (c = *p); p++) { PUTC(c); csum += c; } PUTC(KGDB_END); PUTC(i2digit(csum >> 4)); PUTC(i2digit(csum)); } while ((c = GETC() & 0x7f) == KGDB_BADP); }
int main(int argc, char *argv[]) { if (argc < 3 || argc > 4) { fprintf(stderr, "Usage: %s number from_base to_base\n", argv[0]); fprintf(stderr, " from_base is optional, default to 10\n"); exit(EXIT_FAILURE); } long long int from_base = 0; long long int to_base = 0; char *fromBasePtr; char *toBasePtr; if (argc == 3) { from_base = 10; to_base = strtoll(argv[2], &toBasePtr, 10); if (*toBasePtr) { fprintf(stderr, "Invalid to_base number %s\n", argv[2]); exit(EXIT_FAILURE); } } else if (argc == 4) { from_base = strtoll(argv[2], &fromBasePtr, 10); if (*fromBasePtr) { fprintf(stderr, "Invalid from_base number %s\n", argv[2]); exit(EXIT_FAILURE); } to_base = strtoll(argv[3], &toBasePtr, 10); if (*toBasePtr) { fprintf(stderr, "Invalid to_base number %s\n", argv[3]); exit(EXIT_FAILURE); } } if (from_base < 2 || from_base > 36) { fprintf(stderr, "Invalid from_base number %lli\n", from_base); exit(EXIT_FAILURE); } if (to_base < 2 || to_base > 36) { fprintf(stderr, "Invalid to_base number %lli\n", to_base); exit(EXIT_FAILURE); } gchar *number = argv[1]; long long int temp = 0; int carry = (int)strlen(number); long long int _num = 1; for (int i = carry - 1; i >= 0; i--) { int n = digit2i(number[i]); if (n < 0) { fprintf(stderr, "Error on digit2i\n"); exit(EXIT_FAILURE); } temp += n * _num; _num = _num * from_base; } gchar *output = NULL; // If temp is zero, do conversion one time. do { char c = i2digit(temp % to_base); char str[] = {c, '\0'}; if (c == '\0') { fprintf(stderr, "Error on i2digit\n"); g_free(output); exit(EXIT_FAILURE); } output = NULL == output ? g_strconcat(str, NULL) : g_strconcat(str, output, NULL); temp = temp / to_base; } while (temp); g_print("%s\n", output); g_free(output); return 0; }