diff options
| author | Sadeep Madurange <smadurange@users.noreply.github.com> | 2021-11-28 18:11:57 +0800 |
|---|---|---|
| committer | Sadeep Madurange <smadurange@users.noreply.github.com> | 2021-11-28 18:11:57 +0800 |
| commit | a5a9014fd8e7fe96a12b9414d89e4c5e95c8f353 (patch) | |
| tree | a52882c93a87847ee5552378e6946f5fbe4c8adc | |
| parent | dc60b0b95c2026c9d295a4f04c329101425fe091 (diff) | |
| download | k&r-exercises-a5a9014fd8e7fe96a12b9414d89e4c5e95c8f353.tar.gz | |
2.3
| -rw-r--r-- | 2/3.c | 46 |
1 files changed, 46 insertions, 0 deletions
@@ -0,0 +1,46 @@ +#include <stdio.h> + +#define MAXLEN 1000 + +int htoi(char s[]); + +/* converts positive hex string to decimal */ +int main(int argc, char *argv[]) { + int i, c, d; + char s[MAXLEN]; + + for (i = 0; i < MAXLEN - 1 && (c = getchar()) != EOF && c != '\n'; i++) { + s[i] = c; + } + s[i] = 0; + + d = htoi(s); + if (d < 0) + printf("invalid input: %s\n", s); + else + printf("decimal value: %d\n", d); + + return 0; +} + +int htoi(char s[]) { + int i, n; + char c; + + n = 0; + + for (i = 0; (c = s[i]) != 0; i++) { + if ((i == 0 && c == '0') || (i == 1 && (c == 'x' || c == 'X'))) + continue; + else if (c >= '0' && c <= '9') + n = 16 * n + (c - '0'); + else if (c >= 'A' && c <= 'F') + n = 16 * n + (c - 'A' + 10); + else if (c >= 'a' && c <= 'f') + n = 16 * n + (c - 'a' + 10); + else + return -1; + } + + return n; +}
\ No newline at end of file |
