【发布时间】:2010-11-04 16:39:52
【问题描述】:
我正在寻找一个函数来允许我打印 int 的二进制表示。到目前为止我所拥有的是;
char *int2bin(int a)
{
char *str,*tmp;
int cnt = 31;
str = (char *) malloc(33); /*32 + 1 , because its a 32 bit bin number*/
tmp = str;
while ( cnt > -1 ){
str[cnt]= '0';
cnt --;
}
cnt = 31;
while (a > 0){
if (a%2==1){
str[cnt] = '1';
}
cnt--;
a = a/2 ;
}
return tmp;
}
但是当我打电话时
printf("a %s",int2bin(aMask)) // aMask = 0xFF000000
我得到像这样的输出;
00000000000000000000000000000000000xtpYy(还有一堆未知字符。
这是函数中的缺陷还是我打印了字符数组的地址或其他什么?抱歉,我只是看不出哪里出错了。
NB 代码来自here
编辑:这不是家庭作业仅供参考,我正在尝试用不熟悉的语言调试其他人的图像处理例程。但是,如果它被标记为作业,因为它是一个基本概念,那么公平竞争。
【问题讨论】:
-
随机字符存在,因为这不会在字符串末尾添加 NUL 字节。 ('\0') 这个字符表示字符串的结尾,否则 printf 会一直查找直到找到,在这种情况下查找未知内存。