示例#1
0
/*
 * 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';
}
示例#2
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);
}
示例#3
0
/*
 * 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);
}
示例#4
0
文件: main.c 项目: cwchentw/base
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;
}