任意进制转换

void revert(char* psrc) {
    size_t len = strlen(psrc);
    if (len < 2) return;
    char tmp = 0;
    size_t i = 0, j = 0;
    for (i = 0, j = len - 1; i < j; ++i, --j) {
        tmp = psrc[i];
        psrc[i] = psrc[j];
        psrc[j] = tmp;
    }
}

int tst5() {
    char arr[128];
    char arr_dst[128];
    snprintf(arr, sizeof(arr), "%s", "10111111111000101010");
    int src = 2;
    int dst = 16;

    revert(arr);
    long t = 0;
    long number = 0;
    size_t i = 0;
    int mode = 1;
    for (i = 0; i < strlen(arr); ++i) {
        if (arr[i] >= '0' && arr[i] <= '9') {
            t = arr[i] - '0';
        } else {
            t = arr[i] - 'A' + 10;
        }
        dzlog_info("%lu", t);
        number += mode * t;
        mode *= src;
    }

    i = 0;
    while (number) {
        t = number % dst;
        if (t >= 0 && t <= 9) {
            arr_dst[i++] = t + '0';
        } else {
            arr_dst[i++] = t + 'A' - 10;
        }
        number /= dst;
    }

    revert(arr_dst);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值