Convert an int to ASCII character
Solution 1:
Straightforward way:
char digits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char aChar = digits[i];
Safer way:
char aChar = '0' + i;
Generic way:
itoa(i, ...)
Handy way:
sprintf(myString, "%d", i)
C++ way: (taken from Dave18 answer)
std::ostringstream oss;
oss << 6;
Boss way:
Joe, write me an int to char converter
Studboss way:
char aChar = '6';
Joe's way:
char aChar = '6'; //int i = 6;
Nasa's way:
//Waiting for reply from satellite...
Alien's way: '9'
//Greetings.
God's way:
Bruh I built this
Peter Pan's way:
char aChar;
switch (i)
{
case 0:
aChar = '0';
break;
case 1:
aChar = '1';
break;
case 2:
aChar = '2';
break;
case 3:
aChar = '3';
break;
case 4:
aChar = '4';
break;
case 5:
aChar = '5';
break;
case 6:
aChar = '6';
break;
case 7:
aChar = '7';
break;
case 8:
aChar = '8';
break;
case 9:
aChar = '9';
break;
default:
aChar = '?';
break;
}
Santa Claus's way:
//Wait till Christmas!
sleep(457347347);
Gravity's way:
//What
'6' (Jersey) Mikes'™ way:
//
SO way:
Guys, how do I avoid reading beginner's guide to C++?
My way:
or the highway.
Comment: I've added Handy way and C++ way (to have a complete collection) and I'm saving this as a wiki.
Edit: satisfied?
Solution 2:
This will only work for int-digits 0-9, but your question seems to suggest that might be enough.
It works by adding the ASCII value of char '0'
to the integer digit.
int i=6;
char c = '0'+i; // now c is '6'
For example:
'0'+0 = '0'
'0'+1 = '1'
'0'+2 = '2'
'0'+3 = '3'
Edit
It is unclear what you mean, "work for alphabets"? If you want the 5th letter of the alphabet:
int i=5;
char c = 'A'-1 + i; // c is now 'E', the 5th letter.
Note that because in C/Ascii, A is considered the 0th letter of the alphabet, I do a minus-1 to compensate for the normally understood meaning of 5th letter.
Adjust as appropriate for your specific situation.
(and test-test-test! any code you write)
Solution 3:
Just FYI, if you want more than single digit numbers you can use sprintf:
char txt[16];
int myNum = 20;
sprintf(txt, "%d", myNum);
Then the first digit is in a char at txt[0], and so on.
(This is the C approach, not the C++ approach. The C++ way would be to use stringstreams.)
Solution 4:
My way to do this job is:
char to int
char var;
cout<<(int)var-48;
int to char
int var;
cout<<(char)(var|48);
And I write these functions for conversions:
int char2int(char *szBroj){
int counter=0;
int results=0;
while(1){
if(szBroj[counter]=='\0'){
break;
}else{
results*=10;
results+=(int)szBroj[counter]-48;
counter++;
}
}
return results;
}
char * int2char(int iNumber){
int iNumbersCount=0;
int iTmpNum=iNumber;
while(iTmpNum){
iTmpNum/=10;
iNumbersCount++;
}
char *buffer=new char[iNumbersCount+1];
for(int i=iNumbersCount-1;i>=0;i--){
buffer[i]=(char)((iNumber%10)|48);
iNumber/=10;
}
buffer[iNumbersCount]='\0';
return buffer;
}
Solution 5:
This is how I converted a number to an ASCII code. 0 though 9 in hex code is 0x30-0x39. 6 would be 0x36.
unsigned int temp = 6;
or you can use unsigned char temp = 6;
unsigned char num;
num = 0x30| temp;
this will give you the ASCII value for 6. You do the same for 0 - 9
to convert ASCII to a numeric value I came up with this code.
unsigned char num,code;
code = 0x39; // ASCII Code for 9 in Hex
num = 0&0F & code;