C中的字符值错误

时间:2013-12-19 05:33:22

标签: c char int

在此功能的最后部分需要一些帮助:

char *lfsr(char *bin)
{
    //bits significativos para fazer o xor 128 -> 128,126,101,99;
    int bits[4];
    int bit;

    if(bin[0] == '0')
        bits[0] = 0;
    else if(bin[0] == '1')
        bits[0] = 1;

    if(bin[2] == '0')
        bits[1] = 0;
    else if(bin[2] == '1')
        bits[1] = 1;

    if(bin[21] == '0')
        bits[2] = 0;
    else if(bin[21] == '1')
        bits[2] = 1;

    if(bin[19] == '0')
        bits[3] = 0;
    else if(bin[19] == '1')
        bits[3] = 1;

    bit = bits[0] ^ bits[1] ^ bits[2] ^ bits[3] ^ 1;
    //reconstruir o vector de char depois do lfsr
    for(int i = 127; i >= 1; i--)
    {
        bin[i] = bin[i - 1];
    }
    bin[0] = (int)bit;

    return bin;
}

为什么bin[0]的值是一个奇怪的字符而不是0或1? 有人可以帮我吗? 提前致谢。 Cumps!

3 个答案:

答案 0 :(得分:2)

问题是字符'0'和整数0不同。字符'0'实际上是ascii值48.

尝试bin[0] = (char)(48 + bit);

答案 1 :(得分:0)

好吧,可能你的一个if-elses不起作用。 bin [0],bin [2],bin [21]或bin [19]既不是'0'也不是'1'。 尝试使用您的测试数据运行此代码:

char *lfsr(char *bin)
{
    //bits significativos para fazer o xor 128 -> 128,126,101,99;
    int bits[4];
    int bit;

    if(bin[0] == '0')
        bits[0] = 0;
    else 
    {
        if(bin[0] == '1')
            bits[0] = 1;
        else
            printf("First if-else failed. bin[0] : %c\n", bin[0]);
    }

    if(bin[2] == '0')
        bits[1] = 0;
    else
    {
        if(bin[2] == '1')
            bits[1] = 1;
        else
            printf("Second if-else failed. bin[2] : %c\n", bin[2]);
    }

    if(bin[21] == '0')
        bits[2] = 0;
    else
    {
        if(bin[21] == '1')
            bits[2] = 1;
        else
            printf("Third if-else failed. bin[21] : %c\n", bin[21]);
    }

    if(bin[19] == '0')
        bits[3] = 0;
    else
    {
        if(bin[19] == '1')
           bits[3] = 1;
        else
            printf("Fourth if-else failed. bin[19] : %c\n", bin[19]);
    }

    bit = bits[0] ^ bits[1] ^ bits[2] ^ bits[3] ^ 1;
    //reconstruir o vector de char depois do lfsr
    for(int i = 127; i >= 1; i--)
    {
        bin[i] = bin[i - 1];
    }
    bin[0] = (int)bit;

    return bin;
}

答案 2 :(得分:0)

我是一名C语言心理学家,我的水晶球告诉我,在你的课程中,你做到了这一点:

 printf("the value in bit[0] is %c\n", bit[0]);