我的二进制文件以相反的顺序输出

时间:2014-02-10 04:25:24

标签: c binary reverse

我正在编写一个程序,用户输入字符,单个每个字符,将每个字符转换为二进制,并计算每个二进制文件中的“1”的数量。到目前为止,我有一个工作代码。但是,每个二进制文件的输出顺序相反。像这样:

The character A = 10000010 1's = 2

当我想要/需要的是:

The character A = 01000001 1's = 2

我需要使用我已经拥有的函数数量,并且被告知修复它将像在我的binaryPrinter函数上进行递归一样简单。我很困惑我会在我的功能中做什么,以及我会发送什么参数。任何帮助都会很棒,谢谢。

P.S。我需要在binaryPrinter函数中使用递归来循环程序,如果我将它放在binaryPrinter函数的正确部分中,它显然将解决我的向后二进制问题。

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

void binaryPrinter(int digitsLeft, int value, int * numberOfOnes);
void print(char c);
int charToInt(char C)
{
    int c;

    c=C;    

    return (int) c;
}
int main ()
{
    char value;
    int result = 1;
    while (result != EOF)
        {
            result = scanf("%c", &value);
            if (result != EOF)
                {
                    print(value);
                }
        }

}

void print(char c)
{
    int digits=8, value=c;
    int  ones=0;

    printf("The character %c = ", c);

    binaryPrinter(digits, value, &ones );

    printf(" 1's = %d\n", ones);
}

void binaryPrinter(int digitsLeft, int value, int * numberOfOnes)
{

    for (digitsLeft=8; digitsLeft>0; digitsLeft--)
        {
            if( value & 1 )
                {
                    printf("1");
                    *numberOfOnes=*numberOfOnes+1;
                }
            else
                {
                    printf("0");
                }
            value = value >> 1;

        }
}

3 个答案:

答案 0 :(得分:1)

这是递归版本。请注意,它会在打印任何内容之前进行递归,因此会在处理每个数字时进行打印,然后以正确的顺序打印它们。

void binaryPrinter(int digitsLeft, int value, int * numberOfOnes)
{
    if (digitsLeft > 1) {
        binaryPrinter(digitsLeft - 1, value >> 1, numberOfOnes);
    }

    if (value & 1) {
        printf("1");
        (*numberOfOnes)++;
    } else {
        printf("0");
    }

}

答案 1 :(得分:0)

将循环更改为

for(digitsLeft = 1; digitsLeft&lt; = 8; digitsLeft ++)

答案 2 :(得分:0)

嗯,你正在查看相反顺序的数字:

if (value & 1) --> take the right-most digit
value = value >> 1; --> shift to the right

所以,如果你有

12345678

(是的,这不是位,这只是为了说明定位)输入,你正在做:

8,7,6,5,4,3,2,1

输出。您需要通过处理原始字符串中的左(最高)位来反转逻辑,然后向下工作到最低位。