utils.c 891 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * Copyright (C) 2021 Ant Group. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. #include "utils.h"
  6. static const char hexchars[] = "0123456789abcdef";
  7. int32
  8. hex(char ch)
  9. {
  10. if ((ch >= 'a') && (ch <= 'f'))
  11. return (ch - 'a' + 10);
  12. if ((ch >= '0') && (ch <= '9'))
  13. return (ch - '0');
  14. if ((ch >= 'A') && (ch <= 'F'))
  15. return (ch - 'A' + 10);
  16. return (-1);
  17. }
  18. char *
  19. mem2hex(char *mem, char *buf, int32 count)
  20. {
  21. uint8 ch;
  22. for (int i = 0; i < count; i++) {
  23. ch = *(mem++);
  24. *buf++ = hexchars[ch >> 4];
  25. *buf++ = hexchars[ch % 16];
  26. }
  27. *buf = 0;
  28. return (buf);
  29. }
  30. char *
  31. hex2mem(char *buf, char *mem, int32 count)
  32. {
  33. uint8 ch;
  34. for (int i = 0; i < count; i++) {
  35. ch = hex(*buf++) << 4;
  36. ch = ch + hex(*buf++);
  37. *(mem++) = ch;
  38. }
  39. return (mem);
  40. }