Go Down

Topic: Convert Array of chars to integer except the first position (Read 676 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]);
Get 10% off all 4D Systems TFT screens this month: use discount code MAJENKO10

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").
Get 10% off all 4D Systems TFT screens this month: use discount code MAJENKO10

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