C/C++’s char built-in type is a 1-byte type. char can hold a value [-128, 127]. The name char can be confusing because a char can range from printable characters to non-printable characters. It is easier to think of char as a 1-byte signed integer.
Convert Character char to Integer int - Modern C++
Since C++11, a new C++ expressions have been added to do compile time casting. Compile-time casting is safer as errors can be checked during compile-time over run-time. Specifically, static_cast was added which is perfect usage for converting character to integer.
#include <print>
#include <string>
void characterToInteger()
{
using namespace std;
char input = 'b';
// Modern C++ cast
int output = static_cast<int>(input);
println("Character {} as integer is {}", input, output);
}
Output:
Character b as integer is 98
Alternative Methods
Convert Character char to Integer int - Legacy C
I don’t recommend the legacy C-style casting of converting character to integer. However, in this case, it can be safely done.
ℹ️ Tech Info: We can cast from character to integer. The char to int conversion is called an integral promotion (i.e., smaller integer to larger integer type). Additionally, because we don’t have to explicitly cast to the new type, this is considered an implicit conversion.
void characterToIntegerLegacy()
{
using namespace std;
char input = 'c';
// C-style cast
// casting from smaller to larger integer type
int output_c_style = input;
println("Character {} as integer is {}", input, output_c_style);
}
More static_cast Examples
Convert Character to Digit
A common conversion of a single character char is to representing a decmial digit (i.e., 0123456789) as an integer value (e.g., int).
This works in both C/C++. For example, we have a char defined as 8. First, check if the character by using isdigit to check if the char is a decimal digit. If it is, we can convert it to an integer. To convert the character to integer, we subtract '0' (that is, the character literal '0') from the char. In code, it will look like:
Note: If char just represents a number, then converting a char to int can be done without casting (‘promoted’) because int is a wider type than char.
The standard library header cctype contains other handy character identification and conversion utility functions.
ℹ️ If we want to convert a string to its integer representation check this out: Convert String to Integer in C++.
#include <print>
#include <string>
#include <cctype>
void characterToDigit(char ch)
{
using namespace std;
// if char contains an numeric decimal digit (0-9)
if (isdigit(ch))
{
// convert character to digit
int digit = static_cast<int>(ch - '0');
println("'{}' becomes {}", ch, digit);
}
else
{
println("'{}' is not a digit", ch);
}
}
Output:
// '0' becomes 0
characterToDigit('0');
// '6' becomes 6
characterToDigit('6');
// '9' becomes 9
characterToDigit('9');
// 'X' is not a digit
characterToDigit('X');
Convert character to position in alphabet
Given a character, if the character is alphabet character, print its position in the alphabet, else print error.
#include <print>
#include <string>
#include <cctype>
void characterToAlphabetPosition(char ch)
{
using namespace std;
// check if alphabet character
if (isalpha(ch))
{
// make upper case to lower case so we can use the same formula
int lowerCaseCharacter = tolower(ch);
// from the lowercase character subtract 'a' (97) to offset to zero
int positionInAlphabet = static_cast<int>(lowerCaseCharacter - 'a');
// positions [0,25]
// 26 positions in total
println("{} is position {} in the alphabet", ch, positionInAlphabet);
}
else
{
println("{} is not in the alphabet", ch);
}
}
Output:
// d is position 3 in the alphabet
characterToAlphabetPosition('d');
// A is position 0 in the alphabet
characterToAlphabetPosition('A');
// 4 is not in the alphabet
characterToAlphabetPosition('4');
Print an ASCII table
Another excercise using static_cast. We can print the entire ASCII and extended ASCII characters in a table. A few notes:
printis new in C++23- the standard ASCII characters are
0 to 127inclusive - the extended ASCII characters are
128 to 255inclusive iscntrlchecks if character is a control character (e.g., new line), because they are not printable, print?instead
#include <print>
#include <string>
void printAsciiTable()
{
using namespace std;
// adjustable results per row
constexpr int resultsPerRow = 11;
// print the ASCII and extended ASCII characters
for (int i = 0; i < 256; ++i)
{
// static_cast index i to a character
char ch = static_cast<int>(i);
// if control character, print a '?' instead of character
// static_cast to 'unsigned char' as it is required for iscntrl
if ( iscntrl( static_cast<unsigned char>(ch) ) )
{
// static_cast to int so print will
// show the integer value
print("? {}\t", static_cast<int>(ch));
}
// else print the character and it's ASCII value
else
{
print("{} {}\t", ch, to_string(ch));
}
// print a new line once row is filled with results
bool newRowBegin = (ch + 1) % resultsPerRow == 0;
if (newRowBegin)
{
println();
}
}
}
The output will be the ASCII and extended ASCII table:
? 0 ? 1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 10
? 11 ? 12 ? 13 ? 14 ? 15 ? 16 ? 17 ? 18 ? 19 ? 20 ? 21
? 22 ? 23 ? 24 ? 25 ? 26 ? 27 ? 28 ? 29 ? 30 ? 31 32
! 33 " 34 # 35 $ 36 % 37 & 38 ' 39 ( 40 ) 41 * 42 + 43
, 44 - 45 . 46 / 47 0 48 1 49 2 50 3 51 4 52 5 53 6 54
7 55 8 56 9 57 : 58 ; 59 < 60 = 61 > 62 ? 63 @ 64 A 65
B 66 C 67 D 68 E 69 F 70 G 71 H 72 I 73 J 74 K 75 L 76
M 77 N 78 O 79 P 80 Q 81 R 82 S 83 T 84 U 85 V 86 W 87
X 88 Y 89 Z 90 [ 91 \ 92 ] 93 ^ 94 _ 95 ` 96 a 97 b 98
c 99 d 100 e 101 f 102 g 103 h 104 i 105 j 106 k 107 l 108 m 109
n 110 o 111 p 112 q 113 r 114 s 115 t 116 u 117 v 118 w 119 x 120
y 121 z 122 { 123 | 124 } 125 ~ 126 ? 127 Ç 128 ü 129 é 130 â 131
ä 132 à 133 å 134 ç 135 ê 136 ë 137 è 138 ï 139 î 140 ì 141 Ä 142
Å 143 É 144 æ 145 Æ 146 ô 147 ö 148 ò 149 û 150 ù 151 ÿ 152 Ö 153
Ü 154 ¢ 155 £ 156 ¥ 157 ₧ 158 ƒ 159 á 160 í 161 ó 162 ú 163 ñ 164
Ñ 165 ª 166 º 167 ¿ 168 ⌐ 169 ¬ 170 ½ 171 ¼ 172 ¡ 173 « 174 » 175
░ 176 ▒ 177 ▓ 178 │ 179 ┤ 180 ╡ 181 ╢ 182 ╖ 183 ╕ 184 ╣ 185 ║ 186
╗ 187 ╝ 188 ╜ 189 ╛ 190 ┐ 191 └ 192 ┴ 193 ┬ 194 ├ 195 ─ 196 ┼ 197
╞ 198 ╟ 199 ╚ 200 ╔ 201 ╩ 202 ╦ 203 ╠ 204 ═ 205 ╬ 206 ╧ 207 ╨ 208
╤ 209 ╥ 210 ╙ 211 ╘ 212 ╒ 213 ╓ 214 ╫ 215 ╪ 216 ┘ 217 ┌ 218 █ 219
▄ 220 ▌ 221 ▐ 222 ▀ 223 α 224 ß 225 Γ 226 π 227 Σ 228 σ 229 µ 230
τ 231 Φ 232 Θ 233 Ω 234 δ 235 ∞ 236 φ 237 ε 238 ∩ 239 ≡ 240 ± 241
≥ 242 ≤ 243 ⌠ 244 ⌡ 245 ÷ 246 ≈ 247 ° 248 ∙ 249 · 250 √ 251 ⁿ 252
² 253 ■ 254
I hope it helps! ✌️