Go Down

Topic: Convert Array of chars to integer except the first position (Read 758 times) previous topic - next topic

blastboot

Hello, i'm trying to convert a message received with VirtualWire library that starts with an 'R' to an integer, but at this time i couldn't find an explanation to this.
The message received is like "R016" and it is stored in a array like message[3] and i want to convert message to integer (like atoi function does) but except the letter 'R'.

Can you please give me some help?? THANKS in advance!!

Delta_G

Use atoi but pass it a pointer to the second element in the array instead of the first.

Arrch


Hello, i'm trying to convert a message received with VirtualWire library that starts with an 'R' to an integer, but at this time i couldn't find an explanation to this.
The message received is like "R016" and it is stored in a array like message[3] and i want to convert message to integer (like atoi function does) but except the letter 'R'.

Can you please give me some help?? THANKS in advance!!


How can four letters and a null terminating character be stored in a 3 byte array?

AWOL

"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

majenko

I'll second that motion ;)

It should be message[5], for 4 characters plus terminating null.

And you would use

Code: [Select]

int value = atoi(message+1);


Or, more explicitly:
Code: [Select]

int value = atoi(&message[1]);

blastboot

Thanks for the reply! I've corrected the size of array to 4 (message[4]) to store the Rxxx value (forget the \r).
So i basically need to use atoi function and point the beggining of convertion to position [1], is that what int value = atoi (message + 1) do, is that right??

majenko


Thanks for the reply! I've corrected the size of array to 4 (message[4]) to store the Rxxx value (forget the \r).
So i basically need to use atoi function and point the beggining of convertion to position [1], is that what int value = atoi (message + 1) do, is that right??

There is no \r

\r is "carriage return".  \0 is the end of string marker.

So you have Rxxx\0 - count them... R  x  x  x  \0  - I make that 5.  Not 4, nor 3.  5.

The variable "message" points to the start of the memory set aside as 5 bytes, so message+1 points to the start plus 1.  It is functionally the same as using the & operator (address of) on the second element (message[1]) of the array (&message[1] is "the address of the second element (number 1 counting from 0 - 0, 1, 2, 3, 4) in the array").

blastboot

message[0] = R
message[1] = x
message[2] = x
message[3] = x
message[4] = \O

5 bytes: message[5] is the correct form, confirm

int value = atoi(&message[1])  or  int value = atoi(message + 1)   -----> is the same?

AWOL

#8
Feb 22, 2013, 04:47 pm Last Edit: Feb 22, 2013, 04:52 pm by AWOL Reason: 1
Code: [Select]
[code]int value = atoi(&message[1])  or  int value = atoi(message + 1)   -----> is the same?[/code]

Yes, they're equivalent.

Also, surprisingly is
Code: [Select]
int value = atoi(&1[message])
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

blastboot


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