qq_29510849
2017-07-14 03:58 阅读 1.7k

各位大神,小白想问下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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • fight_in_dl 战在春秋 2017-07-14 06:30

    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");
    }
    

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

    点赞 评论 复制链接分享

相关推荐