When I tried to cast a char to int using static_cast<char>(i) just like here 's top answers
You should use static_cast(i) to cast the integer i to char
//file name :main.cpp
#include <iostream>
int main()
{
char char0 = 'h';
int num = 1;
char char1 = static_cast<char>(num);
std::string combined = std::string() char0 char1;
printf("%s \n", combined.c_str());
return 0;
}
it will only prints out "h" instead of "h1" for some reason, it's not because char1 is null because when I debugged it using gdb
g -g main.cpp -o main
gdb main
break main.cpp:10
run
info locals
It says that
char0 = 104 'h'
num = 1
char1 = 1 '\001'
combined = "h\001"
combined 's value is "h\001" why is this happening?
CodePudding user response:
Things might become clearer to you if you take a look at an ASCII chart. A char with a byte value of decimal 1 corresponds to a special character "Start of Header" not a literal '1'. Try using num = 49, you should see the result of "h1".
So, the integer num has a byte value of b00000001, but a cast to char doesn't change that byte value, it just changes the way that value is interpreted. That's why a cast of int 1 to char isn't '1'.
You can see this in your debugger. Note the 104 'h'. 1 '\001' is how the debugger is presenting the special Start of Header character, like you'll see newline as '\n'.
