Как перевести число из 10 ой системы счисления в любую другую на C

У меня есть задача перевести заданные числа 10ой СС в 16ую и еще в несколько соответсвенных СС. Также мне нельзя использовать непосредственно printf для перевода чисел. Проблема заключается в том, что при выводе итоговых значений появляются некоторые лишние знаки. Кроме того при попытке перевода моим способом последенго числа типа unsigned int происходит ошибка segmentation fault. Подскажите пожалуйста, что не так и как это исправить.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    short x = -2722;
    int y = -564856834;
    unsigned int z= 1594148744;
    long w = 1003399198;
    unsigned long k = 2218572624;

    //short/16>>34

    short xx1 = abs(x), xx2 = abs(x);
    int i11 = -1, i12 = -1;
    while(xx1>0){
        xx1 = xx1/16;
        i11++;
    }
    while(xx2>0){
        xx2 = xx2/34;
        i12++;
    }

    short x1 = abs(x);
    short x2 = abs(x);
    char b11[100];
    while(x1>0){
        int p11 = x1%16;
        if(p11<10){
            b11[i11] = x1%16 + '0';
            x1 = x1/16;
            i11--;
        }
        else{
            b11[i11] = x1%16 + '7';
            x1= x1/16;
            i11--;
        }
    }
    char b12[100];
    while(x2>0){
        int p12 = x2%34;
        if(p12<10){
            b12[i12] = x2%34 + '0';
            x2 = x2/34;
            i12--;
        }
        else{
            b12[i12] = x2%34 + '7';
            x2 = x2/34;
            i12--;
        }
    }

    printf("short;-%s=-%s;34 \n", b11 , b12);

    //int/16>>6

    int yy1 = abs(y), yy2 = abs(y);
    int i21 = -1, i22 = -1;
    while(yy1>0){
        yy1 = yy1/16;
        i21++;
    }
    while(yy2>0){
        yy2 = yy2/6;
        i22++;
    }

    int y1 = abs(y);
    int y2 = abs(y);
    char b21[100];
    while(y1>0){
        int p21 = y1%16;
        if(p21<10){
            b21[i21] = y1%16 + '0';
            y1 = y1/16;
            i21--;
        }
        else{
            b21[i21] = y1%16 + '7';
            y1= y1/16;
            i21--;
        }
    }
    char b22[100];
    while(y2>0){
        int p22 = y2%6;
        if(p22<10){
            b22[i22] = y2%6 + '0';
            y2 = y2/6;
            i22--;
        }
        else{
            b22[i22] = y2%6 + '7';
            y2= y2/6;
            i22--;
        }
    }

    printf("int;-%s=-%s;6 \n", b21 , b22);


    //unsigned int/16>>31

    unsigned int zz1 = z, zz2 = z;
    int i31 = -1, i32 = -1;
    while(zz1>0){
        zz1 = zz1/16;
        i31++;
    }
    while(zz2>0){
        zz2 = zz2/31;
        i32++;
    }

    unsigned int z1 = z;
    unsigned int z2 = z;
    char b31[100];
    while(z1>0){
        int p31 = z1%16;
        if(p31<10){
            b31[i31] = z1%16 + '0';
            z1 = z1/16;
            i31--;
        }
        else{
            b31[i31] = z1%16 + '7';
            z1= z1/16;
            i31--;
        }
    }
    char b32[100];
    while(z2>0){
        int p32 = z2%31;
        if(p32<10){
            b32[i32] = z2%31 + '0';
            z2 = z2/31;
            i32--;
        }
        else{
            b32[i32] = z2%31 + '7';
            z2 = z2/31;
            i32--;
        }
    }

    printf("unsigned int;%s=%s;31 \n", b31 , b32);

    //long/16>>7

    long ww1 = w, ww2 = w;
    int i41 = -1, i42 = -1;
    while(ww1>0){
        ww1 = ww1/16;
        i41++;
    }
    while(ww2>0){
        ww2 = ww2/7;
        i42++;
    }

    long w1 = w;
    long w2 = w;
    char b41[100];
    while(w1>0){
        int p41 = w1%16;
        if(p41<10){
            b41[i41] = w1%16 + '0';
            w1 = w1/16;
            i41--;
        }
        else{
            b41[i41] = w1%16 + '7';
            w1= w1/16;
            i41--;
        }
    }
    char b42[100];
    while(w2>0){
        int p42 = w2%7;
        if(p42<10){
            b42[i42] = w2%7 + '0';
            w2 = w2/7;
            i42--;
        }
        else{
            b42[i42] = w2%7 + '7';
            w2 = w2/7;
            i42--;
        }
    }

    printf("long;%s=%s;7 \n", b41 , b42);

Ответы (0 шт):