各位大神,小白想问下C里面把字符或者字符串打印成二进制码字符串的方法

我设想把字符或者字符串按位右移,把每次的最后一位和0x01做与操作,
只要是1就打印出1,但是现在结果不对。。。。求指导

#include
#include
#include

void main()
{
char buffer[] = "33";
int i = 0;

for(i=(strlen(buffer)*4); i>0; i--)
{
if(buffer[i] && 0x01) == 1 )
{
printf("1");
}
else
{
printf("0");
}
atoi(buffer) > 1;
}
printf("\n");
}

字符串33本应打印出 00110011,但是现在打印出00011101

buffer数组定义的大小为2,合法的读取范围为buffer[0],buffer[1]。
for循环中会读取buffer[8],虽然没有报错,但本质上是越界访问,典型的的不确定行为(undefined behaviour)。

重新写了一个(调试成功),关键处有注释,你可以参考修改或者直接用。

int main()
{
    char buffer[] = "33";
    int i;
    int j;
    int size = strlen(buffer);

    for (j = 0; j < size; j++) //逐个处理buffer数组中各元素
    {
        for (i = 3; i >= 0; i--) //1左移3位为8,和3进行与操作,结果为0。其它几位类似处理,结果为0011
        {
            putchar((buffer[j] & (1 << i)) ? '1' : '0');
        }

    }
    printf("\n");
}

如果对您有帮助,请采纳答案好吗,谢谢!