啊哈哈哈哈哼哈 2017-07-14 03:58 采纳率: 0%
浏览 1735

各位大神,小白想问下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条回答 默认 最新

  • 战在春秋 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");
    }
    

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

    评论

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码