Go Down

Topic: convert a char array of numbers into an integer (Read 10860 times) previous topic - next topic

Metal Slug 2

Hello everyone,

I am having a rather noobish moment right now and could really use some help.

like the title says, I am trying to convert a (section of a) character array of numbers into an integer.

for example, assume I have the following:

int pos;
char command[4] = "b122"
(can also be represented by: char command[4] = {'b','1','2','2'})

and assume that I want to convert the number section of that array into an actual 3-digit integer where i could set

pos = 122;

Essentially take command[1], command[2] and command[3] and somehow concatenate them and convert into an integer.  Is this possible? If so, how should I go about doing this? :-/ Thanks.

The reason for this is to allow my arduino to take commands from a PC.  From "b122" the 'b' specifies which servo to be accessed (in this case the 'base' servo), and 122 specifies the angle to be set.

iard

#1
Jun 24, 2010, 08:27 am Last Edit: Jun 24, 2010, 08:28 am by iard Reason: 1
Hi,
I think that you need to use atoi().

Code: [Select]

char buffer[4];
buffer[0] = command[1];
buffer[1] = command[2];
buffer[2] = command[3];
buffer[3] = '\0';

int  n;
n = atoi(buffer);


lloyddean

The first form, 'char command[4] = "b122;"', would generate a compiler error, "error: initializer-string for array of chars is too long", since you've not left room for the terminating zero required for 'C' style strings.  You'd be better off using 'char command[] = "b122";' in which case you could simply do:


Code: [Select]
char command[] = "b122;

int pos = atoi(&command[1]);

Metal Slug 2

#3
Jun 24, 2010, 08:56 am Last Edit: Jun 24, 2010, 09:08 am by Dustin_Dobransky Reason: 1
Wonderful! It worked! Thanks a million! :D ;D :)
I had no idea you could just use 'atoi' on a character array.

...my 'plan B' was to use  the WString library, and convert the character array into a string, then the string into an integer...totally inefficient and space consuming, especially since I only have an atmega168 with my board :P

Edit:

@lloyddean:
Thanks for your input also, It works perfectly also.
just a quick question though.  i can see that atoi(&command[1]) will convert all characters from the second position in the array onwards, but is there anyway to start the conversion at for example command[1] and stop it at command[3]?...just curious, Thanks.

lloyddean

Isn't that whats happening now?  Or do you mean as command[]  contained "b12"?

If you don't mind modifying the contents of 'command' you could do:

char command[] = "b122";
command[3] = 0;
int pos = atoi(&command[1]);

And you get pos = 12.

Metal Slug 2

What i meant was if you arbitrarily had for example:

char command[] = "b123456789"

would there be a way to extract '1234' from that array, where you start the conversion to an int at command[1] and end it at command[4], but still keep all the data in tact.  Using a buffering method like iard stated would work, but im just wondering if there is any spectial syntax to do this...

like something that might look along the lines of: atoi(&command[1],command[4])

Groove

To do what you want, it would be simplest (probably) to keep the source string intact, and use "strncpy" to copy the portions you want into a temporary buffer, and then apply "atoi" to the temporary buffer.
Per Arduino ad Astra

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy