# Conversion from char to int?

What could be wrong with this code?:

Code:
int arr[10];
char arr2[10];
for (int i=0; i<10; i++)
{
arr[i]=(int)arr2[i];
}

When I output the supposedly converted array, it's outputs some crazy numbers.
???

Filip Larsen
Gold Member
I assume you are using C/C++ here, in which case you should note that automatic variables (variables defined on the stack) are not initialized. Try initialize your character array with some sensible values.

It's arr2[10]="P 1 (a tab) 0";

And it outputs: 80 49 9 48 0 0 0 0 0 0

I want to get 1 and 0 as integers

Filip Larsen
Gold Member
Characters are internally represented by a byte that contains the code for the character in question. See for instance http://en.wikipedia.org/wiki/ASCII.

To get the digit of the character you would normally first test if the character is in the range '0' to '9' and then subtract '0'. Something like this:

Code:
char ch = ...;
if (ch >= '0' && ch <= '9') {
int digit = ch - '0';
// do whatever you need with digit
}

Alternatively you can use some of the methods from the standard ctype.h library (see for instance http://www.cplusplus.com/reference/clibrary/cctype/).

D H
Staff Emeritus
It's arr2[10]="P 1 (a tab) 0";

And it outputs: 80 49 9 48 0 0 0 0 0 0

80 = 'P'
49 = '1'
9 = tab
48 = '0'
0 = end of string

It is working exactly right, assuming you are working on an ASCII machine.

I want to get 1 and 0 as integers
Then you want to do something other than a simple cast.

Alright. The problem is solved to some extend. But a little more problem:

For the given string [P 1 (tab) 0] it outputs fine: 1 0
But when I have a string [P 2 (tab) 34] it outputs: 2 3 (no four.)

What could be the problem?

D H
Staff Emeritus
You need to learn how to parse. Casting is not what you want here.

D H
Staff Emeritus