0

The program objective is to convert decimal to hexadecimal 1)I am having problems assigning integer values to char array elements how is it done. Im getting symbols for my array numerical values. 2) How do I initialize my array to spaces? to get rid of garbage and old data in array elements. 3) could someone explain what my problem is? with integers and chars? 4) Is cout part of my problem?

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>

int main()
{
using namespace std;

// binary declarations
int x, i, z, n, remainder;
int result = 0;
bool loop_cond, remainder_found, octval_found;

// octal declarations
int octalval,octresult,octremainder,temp_octalval;
int octloop_cnt;
bool oct_loop;
octresult = 0;
// hexadecimal declarations
int hexval, hexremainder, temp_hexval;
int hexloop_cnt;
bool hex_loop,hexval_found;
char hexresult[5] = {" "};

cout << "decimal" << "\t" << "binary" << "\t"<< "octal"<<"\t"<<"hexadecimal"<< endl;

for (i = 1; i <= 256; i++){  
hexloop_cnt = 0;
octremainder = 0;
hexval_found = false;
hex_loop = true;
hexloop_cnt = 0;
while (hex_loop != false){

if (hexval_found != true){
    hexval = i / 16;
    hexremainder = i % 16;
}
else {
    temp_hexval  = hexval;
    hexval = hexval / 16;
    hexremainder = temp_hexval % 16;
}


if (hexval == 0){
    switch (hexremainder){
    case 10:
        hexresult[hexloop_cnt] = 'A';
        break;
    case 11:
        hexresult[hexloop_cnt] = 'B';
        break;
    case 12:
        hexresult[hexloop_cnt] = 'C';
        break;
    case 13:
        hexresult[hexloop_cnt] = 'D';
        break;
    case 14:
        hexresult[hexloop_cnt] = 'E';
        break;
    case 15:
        hexresult[hexloop_cnt] = 'F';
        break;
    default:
        hexresult[hexloop_cnt] = (char)hexremainder;
        break;
    }//end switch
    hex_loop = false;
}//end if

if ((hexval < 16) && (hexval > 0)){
    switch (hexremainder){
    case 10:
        hexresult[hexloop_cnt] = 'A';
        break;
    case 11:
        hexresult[hexloop_cnt] = 'B';
        break;
    case 12:
        hexresult[hexloop_cnt] = 'C';
        break;
    case 13:
        hexresult[hexloop_cnt] = 'D';
        break;
    case 14:
        hexresult[hexloop_cnt] = 'E';
        break;
    case 15:
        hexresult[hexloop_cnt] = 'F';
        break;
    default:
        hexresult[hexloop_cnt] = static_cast<char>(hexremainder);
        break;
    }//end switch
    hexloop_cnt++;
    switch (hexval){
    case 10:
        hexresult[hexloop_cnt] = 'A';
        break;
    case 11:
        hexresult[hexloop_cnt] = 'B';
        break;
    case 12:
        hexresult[hexloop_cnt] = 'C';
        break;
    case 13:
        hexresult[hexloop_cnt] = 'D';
        break;
    case 14:
        hexresult[hexloop_cnt] = 'E';
        break;
    case 15:
        hexresult[hexloop_cnt] = 'F';
        break;
    default:
        hexresult[hexloop_cnt] = static_cast<char>(hexval);
        break;
    }//end switch
    hex_loop = false;
  } //end if

if ((hexval >= 16)){
    switch (hexremainder){
    case 10:
        hexresult[hexloop_cnt] = 'A';
        break;
    case 11:
        hexresult[hexloop_cnt] = 'B';
        break;
    case 12:
        hexresult[hexloop_cnt] = 'C';
        break;
    case 13:
        hexresult[hexloop_cnt] = 'D';
        break;
    case 14:
        hexresult[hexloop_cnt] = 'E';
        break;
    case 15:
        hexresult[hexloop_cnt] = 'F';
        break;
    default:
        hexresult[hexloop_cnt] = static_cast<char>(hexremainder);
        break;
    }//end switch
    hexval_found = true;
}//end if 

hexloop_cnt++;
} //endwhile


    cout << i << "\t" << result <<"\t" << octresult<<"\t" << hexresult<< endl;
    result = 0;
    octresult = 0;
//      hexresult[5] = { ' ', ' ', ' ', ' ', ' ' };
}



cin.clear();
cin.ignore(255, '/n');
cin.get();

return 0;
}
2
  • 3
    Please narrow down the code to the relevant parts, or better yet create a Minimal, Complete, and Verifiable Example and show us. Commented Jan 6, 2015 at 17:33
  • 2
    Also indent the code. +1 to Joachim! Commented Jan 6, 2015 at 17:33

2 Answers 2

1

you cant do this

hexresult[hexloop_cnt] = (char)hexremainder;

you need to do

hexresult[hexloop_cnt] = hexremainder + '0';

why? Well think if hexremainder = 1. The ascii for the character "1" is not 0x01 it is 0x31. So you need to add 0x30 to the value. '0' is 0x30 (look at an ascii table to see what is happening http://www.asciitable.com/)

Sign up to request clarification or add additional context in comments.

Comments

0

std::cout could be the problem. Take this example.

#include <iostream>

int main()
{
    unsigned char c = 239;
    std::cout << c << "\n";
    std::cout << static_cast<int>(c) << "\n";

    return 0;
}

Output:

./a.out 
�
239

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.