我设想把字符或者字符串按位右移,把每次的最后一位和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");
}
如果对您有帮助,请采纳答案好吗,谢谢!