summaryrefslogtreecommitdiff
path: root/ch2/2-3.c
diff options
context:
space:
mode:
Diffstat (limited to 'ch2/2-3.c')
-rw-r--r--ch2/2-3.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/ch2/2-3.c b/ch2/2-3.c
new file mode 100644
index 0000000..54ce89f
--- /dev/null
+++ b/ch2/2-3.c
@@ -0,0 +1,42 @@
+#include <stdio.h>
+
+
+unsigned int htoi(char hex[]) {
+ char c;
+ int i;
+ int length;
+ int power;
+ unsigned int result;
+
+ for (length = 0; hex[length] != '\0'; ++length)
+
+ power = 1;
+ result = 0;
+
+ for (i = length - 1; i >= 0; --i) {
+ c = hex[i];
+ printf("%c\n", c);
+
+ if (c >= 'a' && c <= 'f')
+ c = c - 'a' + 10;
+ else if (c >= 'A' && c <= 'F')
+ c = c - 'A' + 10;
+ else if (c >= '0' && c <= '9')
+ c = c - '0';
+ else if (c == 'x' || c == 'X')
+ break;
+ else
+ return 0;
+
+ result += c * power;
+ power *= 16;
+ }
+
+ return result;
+}
+
+
+int main() {
+ char hex[] = "0x589";
+ printf("%d\n", htoi(hex));
+}