Насколько мне известно, C++ не поддерживает целые числа длиной более 64 бит, при этом исключения для конкретных типов компилятора. Следовательно, мне нужно будет преобразовать двоичную строку в строку с основанием 10 (в отличие от целого числа с основанием 10), если я хочу вывести ее на консоль в удобочитаемой форме.
У меня есть следующий код...
Код: Выделить всё
int char_to_int(const char c) {
return ((int) c) - 48;
}
std::string string_addition(std::string s1, std::string s2) {
std::string ret = "";
// making sure the two strings are the same length
while(s1.size() > s2.size())
s2 = '0' + s2;
while (s2.size() > s1.size())
s1 = '0' + s1;
// adding and carrying
for (int32_t i = (int32_t) s1.size(); i >= 0; i--)
ret[i] = (char) ((char_to_int(s1[i]) + char_to_int(s2[i])) + 48);
for (int32_t i = (int32_t) ret.size() - 1; i >= 0; i--)
...
// then finally returning
return ret
}
std::string to_base_ten(const std::string& s) {
std::string ret = "";
for (size_t i = 0; i < s.size(); i++) {
// for each digit, calculate the appropriate number to add
int64_t temp = s[i] * (int) std::pow(2, i);
// performing addition with strings because of potential integer overflow issues
ret = string_addition(ret, std::to_string(temp));
}
return ret;
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... mal-string