IntParsing.h 716 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #ifndef _INTPARSING_H
  2. #define _INTPARSING_H
  3. #include <Arduino.h>
  4. template <typename T>
  5. const T strToHex(const String& s) {
  6. T value = 0;
  7. T base = 1;
  8. for (int i = s.length() - 1; i >= 0; i--) {
  9. const char c = s.charAt(i);
  10. if (c >= '0' && c <= '9') {
  11. value += ((c - '0') * base);
  12. } else if (c >= 'a' && c <= 'f') {
  13. value += ((c - 'a' + 10) * base);
  14. } else if (c >= 'A' && c <= 'F') {
  15. value += ((c - 'A' + 10) * base);
  16. } else {
  17. break;
  18. }
  19. base <<= 4;
  20. }
  21. return value;
  22. }
  23. template <typename T>
  24. const T parseInt(const String& s) {
  25. if (s.startsWith("0x")) {
  26. return strToHex<T>(s.substring(2));
  27. } else {
  28. return s.toInt();
  29. }
  30. }
  31. #endif