string.c 556 B

12345678910111213141516171819202122232425262728293031323334
  1. #include "string.h"
  2. static int hex(char ch)
  3. {
  4. if ((ch >= '0') && (ch <= '9'))
  5. return ch - '0';
  6. if ((ch >= 'a') && (ch <= 'f'))
  7. return ch - 'a' + 10;
  8. if ((ch >= 'A') && (ch <= 'F'))
  9. return ch - 'A' + 10;
  10. return -1;
  11. }
  12. /*
  13. * While we find nice hex chars, build a long_val.
  14. * Return number of chars processed.
  15. */
  16. int hex2u64(const char *ptr, u64 *long_val)
  17. {
  18. const char *p = ptr;
  19. *long_val = 0;
  20. while (*p) {
  21. const int hex_val = hex(*p);
  22. if (hex_val < 0)
  23. break;
  24. *long_val = (*long_val << 4) | hex_val;
  25. p++;
  26. }
  27. return p - ptr;
  28. }