我相信答案很简单,但我不能让我的头周围,所以我希望你能帮助我:)
我尝试打印一个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",感觉像是强制转换问题?谢谢!
1条答案
按热度按时间liwlm1x91#
char
只是整数,当你从argv输入'2'时,它读取字符'2'(在ASCII中等于50)。在第二个例子中,你输入的是int 2,因此有两个不同的输出。你的函数是正确的,输出也是正确的。