Typecasting - Hack Insight: It Security Magazine (2013)

Hack Insight: It Security Magazine (2013)

Lesson 11: Typecasting

Typecasting is making a variable of one type, such as an int, act like another type, a char, for one single operation. To typecast something, simply put the type of variable you want the actual variable to act as inside parentheses in front of the actual variable. (char)a will make 'a' function as a char. #include <iostream>

using namespace std; int main() {

cout<< (char)65 <<"\n"; // The (char) is a typecast, telling the computer to interpret the 65 as a // character, not as a number. It is going to give the

character output of // the equivalent of the number 65 (It should be the letter A for ASCII). cin.get();


One use for typecasting for is when you want to use the ASCII characters. For example, what if you want to create your own chart of all 256 ASCII characters. To do this, you will need to use to typecast to allow you to print out the integer as its character equivalent.

#include <iostream> using namespace std; int main() {

for ( int x = 0; x < 256; x++ ) { cout<< x <<". "<< (char)x <<" "; //Note the use of the int version of x to // output a number and the use of (char) to // typecast the x into a character // which outputs the ASCII character that // corresponds to the current number

} cin.get(); }

The typecast described above is a C-style cast, C++ supports two other types. First is the function-style cast:

int main() { cout<< char ( 65 ) <<"\n"; cin.get();

This is more like a function call than a cast as the type to be cast to is like the name of the function and the value to be cast is like the argument to the function. Next is the named cast, of which there are four:

int main() { cout<< static_cast<char> ( 65 ) <<"\n"; cin.get();

static_cast is similar in function to the other casts described above, but the name makes it easier to spot and less tempting to use since it tends to be ugly. Typecasting should be avoided whenever possible. The other three types of named casts are const_cast, reinterpret_cast, and dynamic_cast. They are of no use to us at this time.