storing 10 digits in 5bytes is possible
poc for 9 digits in 4bytes:
unsigned long final_number = 0;
byte number[9] = {0};
unsigned long hundred_millions = 0;
unsigned long ten_millions = 0;
unsigned long millions = 0;
unsigned long hundred_thousands = 0;
unsigned long ten_thousands = 0;
unsigned int thousands = 0;
unsigned int hundreds = 0;
byte tens = 0;
byte unit = 0;
byte c = 0;
byte i = 0;
bool flag = 0;
void setup() {
Serial.begin(115200);
Serial.print("Enter 9 digit phone number please:");
while (!(Serial.available() == 10)) {}
while ((c = Serial.read()) != '\n') {
number[i] = c - 48;
Serial.write(number[i] + 48);
i++;
if (i > 10) {
flag = 1;
Serial.println(F("too many numbers try again"));
break;
}
}
Serial.println("");
if (!flag) {
hundred_millions = number[0] * 100000000L;
ten_millions = number[1] * 10000000L;
millions = number[2] * 1000000L;
hundred_thousands = number[3] * 100000L;
ten_thousands = number[4] * 10000L;
thousands = number[5] * 1000;
hundreds = number[6] * 100;
tens = number[7] * 10;
unit = number[8] * 1;
final_number+= hundred_millions;
final_number+= ten_millions;
final_number+=millions;
final_number += hundred_thousands;
final_number+=ten_thousands;
final_number+=thousands;
final_number+=hundreds;
final_number+=tens;
final_number+=unit;
Serial.print(F("phone number="));
Serial.println(final_number);
Serial.print(F("size of final_number in bytes="));
Serial.println(sizeof(final_number));
}
else Serial.println(F("you did some mistakes"));
}
void loop() {
// put your main code here, to run repeatedly:
}
output:
Enter 9 digit phone number please:476866985
phone number=476866985
size of final_number in bytes=4
via 1 small function numbers can be decoded back if needed.