如何用C填充0的数组

时间:2016-07-16 19:33:25

标签: c arrays pointers binary hex

对于我的项目,我需要制作一个十六进制计算器,除了我需要将其转换为二进制并显示它,我知道这很容易。我可以读取的十六进制的最大值是'8'但是如果我读了一个少于8个字符的十六进制数,我需要用0表示第一个二进制数.Ej:

in Hex:ADA0CAFE

in Binary:10101101 10100000 11001010 11111110

但是如果我得到一个十六进制:C45FA

输出应为:00000000 00001100 01000101 11111010

我的部分代码看起来像这样:

char hex[100];
printf("Hexadecimal: ");
scanf("%s",hex);
convert(hex);

以及转换它的功能:

void convert(char hex[]){
    for(i=0;i<8;i++){
    switch(hex[i]){
    case '0': printf("0000"); break;
    case '1': printf("0001"); break;
    case '2': printf("0010"); break;
    case '3': printf("0011"); break;
             .
             . 
             .
    }

所以我不知道如何使用0填充数组填充的第一个位置,然后开始用十六进制字符编写数组。

1 个答案:

答案 0 :(得分:2)

convert中找到传递的十六进制字符串的长度,并输出前导0000字符串以使长度为8.也许是这样:

void convert(char hex[]){
    size_t len, i;
    len = strlen(hex);
    for(i = len; i < 8; i++) {
        printf("0000");                     // pad with leading zeros
    }
    for(i = 0; i < len; i++) {              // the rest of the string
        switch(hex[i]) {
            case '0': printf("0000"); break;
            case '1': printf("0001"); break;
            case '2': printf("0010"); break;
            case '3': printf("0011"); break;
            .
            . 
            .
        }
    }
}