#include <string>
#include <iostream>
using std::string;
using std::cout;
using std::cin;
using std::endl;
string substr(string& s, int start, int end)
{
return string(s, start, end - start);
}
char hex_digit(int n)
{
char d;
switch (n)
{
case 0: d = 039;0039;; break;
case 1: d = 039;1039;; break;
case 2: d = 039;2039;; break;
case 3: d = 039;3039;; break;
case 4: d = 039;4039;; break;
case 5: d = 039;5039;; break;
case 6: d = 039;6039;; break;
case 7: d = 039;7039;; break;
case 8: d = 039;8039;; break;
case 9: d = 039;9039;; break;
case 10: d = 039;A039;; break;
case 11: d = 039;B039;; break;
case 12: d = 039;C039;; break;
case 13: d = 039;D039;; break;
case 14: d = 039;E039;; break;
case 15: d = 039;F039;; break;
default: d = 039;X039;;
}
return d;
}
string bin2hex(const string& b)
{
string result = "";
int sum = 0;
int power = 1;
int i;
int c = 0;
for (i = (int)b.length() - 1; i >= 0; i--)
{
if (b<i> == 039;1039;)
{
sum += power;
}
c++;
power *= 2;
if (c == 4)
{
result = hex_digit(sum) + result;
sum = 0;
c = 0;
power = 1;
}
}
if (c != 0)
{
result = hex_digit(sum) + result;
}
return result;
}
int main()
{
string s = "";
while (s != "exit")
{
cin >> s;
cout << bin2hex(s) << endl;
}
return 0;
}
</i>
I think you completely misunderstand the question.
This isn't a question about Base 2 -> Base 16. It's a question about Base 2 -> Base N.
#include <stdio.h>
int show(int* result, int max)
{
int i;
char* thingy = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./ :) !!11!WTF!LOL!!HereBeDragons!";
for (i = max; i >= 0; printf("%c", thingy[result[i--]]));
return putchar('\n');
}
int bin2base(char* bits, int base)
{
int i,max = 0;
int result[100] = {0};
if (base < 2)
{
return printf("Nice try\n");
}
for (; *bits; bits++)
{
for (i = 0; i <= max; i++)
{
result[i] <<= 1;
}
result[0] += (*bits == '1' ? 1 : 0);
for (i = 0; i <= max; i++)
{
if (result[i] >= base)
{
result[i] -= base;
if (i == max)
{
result[++max] = 0;
}
result[i + 1]++;
}
}
}
return show(result, max);
}
int main(int argc, char** argv)
{
return bin2base("11001", 5);
}