diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2025-09-24 13:50:55 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2025-09-24 13:50:55 +0800 |
| commit | 87f0114dd8d2cf355c4e631ab089ddd75abdcc0c (patch) | |
| tree | ddb6753774ee91f090f59a89adf7e21f780dc2ad /ishow.c | |
| download | datalab2026-87f0114dd8d2cf355c4e631ab089ddd75abdcc0c.tar.gz datalab2026-87f0114dd8d2cf355c4e631ab089ddd75abdcc0c.tar.xz | |
Initial commit: Add starter code for Datalab
Diffstat (limited to 'ishow.c')
| -rw-r--r-- | ishow.c | 69 |
1 files changed, 69 insertions, 0 deletions
@@ -0,0 +1,69 @@ +/* Display value of fixed point numbers */ +#include <stdlib.h> +#include <stdio.h> + +/* Extract hex/decimal/or float value from string */ +static int get_num_val(char* sval, unsigned* valp) { + char* endp; + /* See if it's an integer or floating point */ + int ishex = 0; + int isfloat = 0; + int i; + for (i = 0; sval[i]; i++) { + switch (sval[i]) { + case 'x': + case 'X': + ishex = 1; + break; + case 'e': + case 'E': + if (!ishex) + isfloat = 1; + break; + case '.': + isfloat = 1; + break; + default: + break; + } + } + if (isfloat) { + return 0; /* Not supposed to have a float here */ + } else { + long long int llval = strtoll(sval, &endp, 0); + long long int upperbits = llval >> 31; + /* will give -1 for negative, 0 or 1 for positive */ + if (valp && (upperbits == 0 || upperbits == -1 || upperbits == 1)) { + *valp = (unsigned)llval; + return 1; + } + return 0; + } +} + +void show_int(unsigned uf) { + printf("Hex = 0x%.8x,\tSigned = %d,\tUnsigned = %u\n", + uf, (int)uf, uf); +} + +void usage(char* fname) { + printf("Usage: %s val1 val2 ...\n", fname); + printf("Values may be given in hex or decimal\n"); + exit(0); +} + +int main(int argc, char* argv[]) { + int i; + unsigned uf; + if (argc < 2) + usage(argv[0]); + for (i = 1; i < argc; i++) { + char* sval = argv[i]; + if (get_num_val(sval, &uf)) { + show_int(uf); + } else { + printf("Cannot convert '%s' to 32-bit number\n", sval); + } + } + return 0; +} |
