Guest User

Untitled

a guest
Jun 18th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. int htoi(char hex_string[]);
  5. int expect(int got, int wanted);
  6. void debuggerino(void);
  7.  
  8. int htoi(char hex_string[]) {
  9.  
  10. /* calculate len first and check for 0x offset */
  11. int hex_offset = 0;
  12. int len = 0;
  13. for (int i = 0; hex_string[i] != '\0'; i++) {
  14. if (i == 0 && hex_string[i] == '0')
  15. hex_offset++;
  16. if (i == 1 && tolower(hex_string[i]) == 'x')
  17. hex_offset++;
  18. len++;
  19. }
  20.  
  21. int value = 0;
  22. int start = hex_offset == 2 ? hex_offset : 0;
  23. for (int i = start; i < len; i++) {
  24. char c = tolower(hex_string[i]);
  25. //printf("got %c %i\n", c, c);
  26. if (c >= '0' && c <= '9') {
  27. //printf("1-9 adding: %i\n", (c - 48) * (1 << (4*(len-1-i))));
  28. value += (c - 48) * (1 << (4*(len-1-i)));
  29. } else if (c >= 'a' && c <= 'f') {
  30. //printf("a-f adding: %i\n", ((c - 'a') + 10) * (1 << (4*(len-1-i))));
  31. value += ((c - 'a') + 10) * (1 << (4*(len-1-i)));
  32. } else {
  33. return -1; /* error */
  34. }
  35. }
  36.  
  37. return value;
  38. }
  39.  
  40. int expect(int got, int wanted) {
  41. if (got != wanted) {
  42. printf("FAIL: got: %i wanted: %i\n", got, wanted);
  43. return -1;
  44. } else {
  45. printf("PASS\n");
  46. return 0;
  47. }
  48. }
  49.  
  50. void debuggerino() {
  51. int len = 2;
  52. int i = 1;
  53. printf("'f' - 'a' : %i\n", ('f' - 'a'));
  54. printf("('f' - 'a') + 10 : %i\n", (('f' - 'a') + 10));
  55. printf("(('f' - 'a') + 10) * (1 << (4*(len-1-i))) : %i\n",
  56. (('f' - 'a') + 10) * (1 << (4*(len-1-i))));
  57. }
  58.  
  59. int main() {
  60. //debuggerino();
  61. //return 0;
  62.  
  63. expect(htoi("10"), 16);
  64. expect(htoi("100"), 256);
  65. expect(htoi("FF"), 255);
  66. expect(htoi("Fe"), 254);
  67. expect(htoi("0xFe"), 254);
  68. expect(htoi("0XFe"), 254);
  69. expect(htoi("0Xe3"), 227);
  70. expect(htoi("0x00"), 0);
  71. expect(htoi("0000000"), 0);
  72. expect(htoi("100"), 256);
  73. }
Add Comment
Please, Sign In to add comment