【发布时间】:2015-02-27 18:15:24
【问题描述】:
我几乎解决了这个练习: 二进制到十进制和反向转换器 - “开发一个转换器以将十进制数转换为二进制或将二进制数转换为其十进制等效值。” 所以,二进制到十进制转换器工作得很好,但另一个没有。 convertToBinary() 函数返回废话,我不知道为什么。代码如下:
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
char* convertToBinary(int dec);
int convertToDec(const char* bin);
int main()
{
std::cout << convertToBinary(100) << std::endl; // wtf!
return 0;
}
char* convertToBinary(int dec)
{
char binary[15] = "";
int result;
for(int i = 0; dec >= 1; dec /= 2, ++i)
{
result = !((dec % 2) == 0);
binary[i] = result + 48;
}
for(int i = strlen(binary); strlen(binary) % 4 != 0; ++i) // add some zeros to make it look cool
binary[i] = '0';
for(int i = 0, j = strlen(binary)-1; i < j; ++i, --j) // reverse the array
{
char temp = binary[i];
binary[i] = binary[j];
binary[j] = temp;
}
std::cout << binary << std::endl; // looking good!
return binary;
}
int convertToDec(const char* bin)
{
int dec = 0;
int size = strlen(bin);
for(int i = 0; *bin; ++i, ++bin)
{
int ch = *bin - 48;
dec += ch * pow(2, size - i - 1);
}
return dec;
}
【问题讨论】:
-
你可以使用
bitwise operators吗? -
废话来自返回本地数组的地址
binary。您应该使用std::string而不是 char 数组,或者您应该在堆上分配 char 数组。 -
而且还使用编译器警告,你会知道的。
-
是的。我知道它们是如何工作的,但我从未真正使用过它们。
-
你应该在这种情况下。