Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
8 years, 6 months ago.
string convert to int
I have this code :
#include "mbed.h" #include "stdio.h" SPI DDS(p5, p6, p7); // mosi, miso, sclk DigitalOut SPI_EN(p8); //Pino de enable da DDS. DigitalOut IO_UPD(p9); //Pino de update da DDS. Serial pc(USBTX, USBRX); // tx, rx DigitalOut led(LED1); char DDS_REGIS[21] = {0x00,0x01,0x02,0x03,0x04,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16}; void DDS_WRITE(char regis_0, int dado_0) { SPI_EN = 0; wait(0.0001); DDS.write(regis_0); wait(0.0001); DDS.write(dado_0); wait(0.0001); SPI_EN = 1; } void DDS_ATUALIZA(void) { wait(0.0001); IO_UPD = 1; wait(0.00005); IO_UPD = 0; } ///////////////////////////////////////////////////// [Programa Principal] ////////////////////////////////////////////////////////////////////////// int main (){ DDS.format(8,0); DDS.frequency(10000); SPI_EN = 1; IO_UPD = 0; int DADOS_SPI; char DADOS_PC[33]; pc.gets(DADOS_PC,33); pc.printf(" Digitou '%s' \n ",DADOS_PC); DADOS_SPI = atoi(DADOS_PC); pc.printf(" %d \n",DADOS_SPI); wait(0.1); DDS_WRITE(DDS_REGIS[0],DADOS_SPI); wait(0.0001); DDS_ATUALIZA(); }
When i send my comand to mbed , i got this answer : 2147483647.
I don't uderstand whats its means.
Can anyone helps me ?
2 Answers
8 years, 6 months ago.
Hello Rogério,
To make you code nicer when diplayed on this page (i.e. formatted as computer source code), could you please enclose it with the lines as indicated below?
<<code>>
your source code
<</code>>
Your additinal notes, comments and pictures.
Thank you.
8 years, 6 months ago.
atoi assumes that the string you are giving it is in base 10 and returns an int data type. You are passing it what looks like a 32 bit binary number. Since an int is defined as being at least 16 bits it's not large enough to store your result even if the conversion was correct.
In other words it's not going to work.
If you want to convert a string of binary digits into to an integer use strtol()
e.g.
long int DADOS_SPI = strtol(DADOS_PC,NULL,2); // strtol returns a long (at least 32 bits) pc.printf(" %ld \n",DADOS_SPI); // %ld since it is a long int
http://www.cplusplus.com/reference/clibrary/cstdlib/strtol/
Assigned to
8 years, 6 months ago.This means that the question has been accepted and is being worked on.