Hi, I'm running this code to convert a date from individual char types to one dec number.
unsigned long date_convert() { //converts 6 ascii digits in eprom_date array into integer returned
When my input is > 39999 I get a huge incorrect final value out. I need to convert up to 92000.
I'm really messing with caller ID dates but I think for our purposes it doesn't matter.
I feel like the unsigned long should be ok.
Any help would be appreciated.
unsigned long retval = 0; //
eprom_date[0] = '3'; // test values (want to go up to 92000 here
eprom_date[1] = '9';
eprom_date[2] = '9';
eprom_date[3] = '9';
eprom_date[4] = '9';
retval = (eprom_date[0] - 0x30) * 10000; // year ones
retval += (eprom_date[1] - 0x30) * 1000; // month tens
retval += (eprom_date[2] - 0x30) * 100; // month ones
retval += (eprom_date[3] - 0x30) * 10; // day tens
retval += (eprom_date[4] - 0x30); // day ones
Serial.print("Date Convert= "); Serial.println(retval, DEC); // expect 39999 here
return (retval);
Your math such as (eprom_date[0] - 0x30) * 10000; is conducted using int
an int on an 8 bit microcontroller goes to 32767
if you want to make that unsigned long math, you need to force the data type adding ul to the literals for example
retval = (eprom_date[0] - 0x30ul) * 10000ul; // year ones