C语言 从argv打印位

xuo3flqw  于 2023-01-01  发布在  其他
关注(0)|答案(1)|浏览(164)

我相信答案很简单,但我不能让我的头周围,所以我希望你能帮助我:)
我尝试打印一个unsigned char的位,这里的值是2,问题是当从argv [1][0]强制转换时,我得到了一个错误的答案,而当直接发送数字2时,我得到了一个正确的答案。

void    print_bits(unsigned char octet)
{
    int i;
    unsigned char   b;

    i = 8;
    while (i--)
    {
        b = (octet >> i & 1) + '0';
        write(1, &b, 1);
    }
}

int main(int argc, char **argv)
{
    print_bits((unsigned char)argv[1][0]);
    write(1, "\n", 1);
    print_bits(2);
    write(1, "\n", 1);
    return (0);
}

给我:

00110010
00000010

我在调试时注意到,如果在print_bits的开头打印"octet"变量,从argv进行强制转换时得到的ASCII值为2,直接输入值2时得到的值为"\002",感觉像是强制转换问题?谢谢!

liwlm1x9

liwlm1x91#

char只是整数,当你从argv输入'2'时,它读取字符'2'(在ASCII中等于50)。在第二个例子中,你输入的是int 2,因此有两个不同的输出。你的函数是正确的,输出也是正确的。

相关问题