【发布时间】:2014-05-24 22:35:56
【问题描述】:
char *toBin(unsigned long long num)
{
char s[9999];
const int size= 9999;
char *temp = new char[size];
int i, j;
int binBase = 2;
for(i=0; num!= 0; i++)
{
s[i] = num % binBase + '0';
num /= binBase;
}//get backwards binary
for(j=0; i>=0; j++)
{
i--;
temp[j]=s[i];
}//reverse binary sequence
//increments one more so need to decrement
temp[--j] = '\0';
return temp;
delete temp;
}
如果我在 char 数组中有“82”,我首先将“82”转换为十进制 82,然后将 82 给上面的函数以转换为二进制。这仅在一定的数字限制内有效。
我认为我的问题是 unsigned long long 只能保存一定数量的数字,所以当它超过这个限制时,一些随机的东西会发送到函数,它会打印出错误的二进制文件。
上述函数将 unsigned long long num 转换为二进制。我意识到更好的方法是查看 char 数组中的每个字符,而不是先将其转换为数字,然后使用这些值转换为二进制。然而,我很难把它写成代码。任何建议或帮助将不胜感激。
【问题讨论】:
-
与如何获取以二进制形式打印的数字并没有真正的关系,但是您在此函数中分配了很多不需要的内存。您最多需要 sizeof(unsigned long long)*8+1 个字符(空终止符为 +1)。另外,删除温度;永远不会被调用,因为到达返回时函数结束。